正则表达式基于JavaScript的入门详解

关于正则表达式,和很多前辈聊起这个知识点时,他们的反馈都比聊其他技术谦逊,而和很多刚入门的程序员讨论时甚至会有觉得你看不起他。

的确,正则表达式从通常的应用来看,的确不难,比如电话,邮箱等验证。语法,逻辑都算不上复杂,我之前也认为正则表达式也算不上什么高大上的技术。

但是,改变我看法的是,有一次有个前辈给我出了一个题:

将一串数字从后向前每隔三位打点,例如“100000000000000”;

var str = "100000000000000";
var reg = /(\B)(?=(\d{3})+$)/g;
console.log(str.replace(reg,"."));
//输出结果:100.000.000.000.000

后来他跟我说,这个题是百度有一年校招的最后一个题,20分。

有人会说,这个并不是唯一的解法。

不错,这的确不是,但是只有这个解法当年百度给了满分,其他解法就算答案正确,基本上都只给了3~5分。

或许这个事情告诉了我们,结果并不是编程的“结果”,程序的核心价值应该是效率。

正则表达式在基础应用领域的确不难,但是在实际解决问题的时候能用正则表达式化繁为简的不见得有多少人能做得到。

我对正则表达式也只能说是做到了解,写这篇博客的原因是希望能与大家互动学习深入的掌握正则表达式,有什么关于正则表达式的问题大家可以在评论区留言交流,也希望大家多多分享关于正则表达式的实际应用,同时,我也用过这篇文章总结一些关于正则表达式的基础知识点,方便大家查阅和学习交流,有什么地方总结的不正确的地方还希望大家多多指正。

正则表达式的基础知识点:

1.转义字符

2.元字符

3.区间——方括号[]

4.重复限定符(量词)

5.边界与属性

6.分组与子表达式及反向引用

7.条件或

8.捕获与非捕获

9.零宽断言

10.贪婪与非贪婪

以上就是正则表达式的所有知识点,内容之少,但是其分量在编程领域之重不言而喻,所有的编程语言都有正则表达式就说明了这一点。

我的总结没有根据知识点的难易程度来排序,在写这篇博客之前我也参考了别人的博客,甚至我开始学习的时候很大程度也是靠读博客,但是我总感觉有些方式并不是很合适,大部分的正则表达式入门博客都是基于难易程度排序来讲,而且还拆分的很细,有的之间有很大关联的知识点被拆分,中间还隔了几个知识点,理解起来费劲。

这么来讲吧,我看过好几本研究关于记忆和学习的书,它们都有一个共通点,就是讲究知识的关联性,甚至在一些记忆大师的理论里,他们为了强记一些没有关联的信息时都会特意采用一些其他关联性的将其关联起来,来加强记忆,比如很出名的《记忆宫殿》,好了,有点扯远了,我只想告诉大家我这样的总结安排会更加适合理解学习。

1.转义字符:“\”

其实转义字符算不上完全的正则表达式的知识点。

将他放到这里来讲,而且还放到第一个来讲,是考虑到方便刚刚学习正则表达式的同学理解后面的知识点。

通俗的解释转义字符就是,通过“\”来表达我们不能按照正常字符表达方式的字符。

示例,如果在一个字符串中有一个双引号字符:

var mark= "ab\"cd";
console.log(mark);
//输出ab"cd

反斜杠“\”在字符串中的作用就是,将它后面的字符变成该字符串的文本,而本身不作为字符串的实际字符。

转义字符,也就是反斜杠"\"在程序逻辑上,作用是清除字符本身自带的语法含义。上一个示例就是利用反斜杠清楚了双引号的语法含义。

//1.本身不作为字符串的实际字符
var mark = "ab\cd";
console.log(mark);
//输出结果:abcd
//2.如果反斜杠是字符串的一个字符?
var backslash ="\\";
console.log(backslash);
//输出结果:\ //3.一个字符串中包含了一个反斜杠“\”,恰好后面还跟了一个n或者r又或者0 //会出现什么情况,怎么解决 var n = "ab\ncd"; //输出结果:ab // cd var nn = "ab\\ncd"; //输出结果:ab\ncd var r = "ab\rcd"; //输出结果:abcd var rr = "ab\\rcd"; //输出结果:ab\rcd var zero = "ab\0cd"; //输出结果:ab cd var zeros = "ab\\0cd"; //输出结果:ab\0cd;

 转义字符还有一个比较常用的实际开发应用,就是我们遇到一个结构比较复杂的字符,

但是字符串在通常的语法中不能换行,这时我们就可以采用转义字符来解决。

var inhtml = "\
    
XXXXX
\
    \
  • XXX
  • \
  • XXX
  • \
\
";

关于转义字符暂时就解释到这里,很简单的一个知识点,算是一个前期铺垫吧。

2.元字符

 元字符 说明
 . 匹配除换行(\n)和回车符(\r)以外的任何字符
 ^ 匹配字符串的开始位置。(边界部分详细介绍)
 $ 匹配字符串的结束位置。(边界部分详细介绍)
 \w 匹配单词字符,即0-9A-z_;(区间部分详细介绍)
 \W 匹配非单词字符,即除了\w以外的任何字符(区间部分详细介绍)
 \d 匹配数字,即0-9;(区间部分详细介绍)
 \D 匹配非数字字符,即除了\d的任何字符(区间部分详细介绍)
 \s 匹配空白字符 。(区间部分详细介绍)
 \S 匹配非空白字符。(区间部分详细介绍)
 \b 匹配单词边界, 即单词的前后两个位置。(边界部分详细介绍)
 \B 匹配非单词边界,即不是单词的前后两个位置。(边界部分详细介绍)
 \0 匹配null,在字符串中采用转义形式,\0实现的是一个空格的效果。(根据转义字符,参考\n的详细说明理解)
 \n

匹配换行字符。

在字符串中出现了\n如:var str = "ab\ncd";匹配字符串str的正则可以写成/ab\ncd/或者/\w\w\n\w\w/;

如果通过console.log输出的字符串是:ab\ncd,我们可以通过转义字符推导出字符串为"ab\\ncd";相匹配的字符串也要写成/ab\\ncd/;

 \f 匹配换页符。(根据转义字符,参考\n的详细说明理解)
 \r 匹配回车符。(根据转义字符,参考\n的详细说明理解)
 \t 匹配制表符。(根据转义字符,参考\n的详细说明理解);(\t同等于在编辑文本时输入TAB键,但是在字符串中输入TAB会被编译成空格,要想在字符串中获得实际的TBA键入一样的效果就是在字符串中写入\t,所以就有了这个反向字符)
 \v 匹配垂直制表符。(根据转义字符,参考\n的详细说明理解)
 \XXX 匹配以八进制数XXX规定的字符 。
 \Xdd 匹配以十六进制数dd规定的字符 。
 \uXXXX 匹配以十六进制数XXXX规定的Unicode字符。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.区间——方括号[]

正则表达式提供一个元字符“方括号”(也通常称“中括号”)来表示一个字符的取值范围。

  限定一个字符为0~9可以写成[0-9]; -->即为数字字符,也可以用“\d”表示。

  限定一个字符为a~z,即为小写字母可以写成[a-z];

  限定一个字符为A~Z,即为大写字母可以写成[A-Z];

  所以如果一个字符为任意字母和数字可以表示为[a-zA-Z0-9]。

  限定一个字符是指定的几个字符中的任意一个可以写成[a%M],即表示这个字符只能是“a”,“%”,"M"其中的一个。

  也可以通过[^]的方式反向取值,即表示除了罗列的字符以外的任意字符。

  假设一个字符不是"a","b","c"的任意字符可以表示成[^abc]。

在前面的元字符中,很多都拥有类似功能,其实际也是区间的一种表达形式,下面我就用区间的形式解析出来,供大家参考。

1 \w === [0-9A-z_];
2 \W === [^\w];
3 \d === [0-9];
4 \D === [^\d];
5 \s === [\t\n\r\v\f];
6 \S === [^\s];

4.重复限定符(量词)

 语法  说明
 *  重复零次或更多次
 +  重复一次或更多次
 ?  重复零次或一次
 {n} 重复n次
 {n,} 重复n次或更多次
 {n,m}  重复n到m次

 

 

 

 

 

 

 

 

 

 

 

 

 

在没有重复限定符的情况下,正则表达式就是一个累赘,所以在前面一直没有真正意义的写过示例演示。

有了重复限定符之后,应用一些实例来理解正则表达式:

 1 //匹配11位数的手机号码
 2 //不使用重复限定符的情况下
 3 /^1\d\d\d\d\d\d\d\d\d\d$/
 4 //使用重复限定符
 5 /^1\d{10}$/
 6 
 7 //匹配八位数的QQ号码
 8 /^\d{10}$/
 9 
10 //匹配银行卡号14至18位的数字
11 /^\d{14,18}$/
12 
13 //匹配任意长度的单词
14 /\b\w+\b/

5.边界与属性

  在解析边界与属性之前,我们先要了解一下正则表达式的匹配原则。

  正则表达式代表的是一个字符串中的某个片段的规律,

  当使用正则表达式的方法对一个特定的字符进行匹配的时候,

  正则表达式会对字符的每个字符从前往后逐个匹配。

 属性  说明
 g  全局匹配
 i  忽略字母大小写
 m  多行匹配

 

 

 

 

 

 

 

  关于g的全局匹配逻辑我觉得用下面一段代码更容易解释,也更清晰明了。

 1 var str = "a1b2c3d";
 2 var reg = /\d/;
 3 //匹配到的结果是:1
 4 var reg1 = /\w/g;
 5 //匹配到的结果是:1,2.3
 6 
 7 var str1 = "a123b456c789d";
 8 var reg2 = /\w+/;
 9 //匹配结果是:123;
10 var reg3 = /\w+/g;
11 //匹配到的结果是:123,456,789;

  以上的代码说明了g属性可以使字符串中,符合条件的所有片段匹配出来。

  这时候有的同学就会说23,56,89也符合\d+的形式,是的,从正则表达式来讲的确符合条件,

  但是,匹配原则不会重新匹配已经被匹配的字符。

 

  接下来解释,关于边界内容,先看以下示例:

  字符串12345678符合/\d{8}/,如果使用这样的一个正则表达式来验证8位数的字符串是否合理呢?

  如果出现字符串123456789,/\d{8}/也符合匹配条件,但是他却不是8位数的字符串。

  这时候我们就需要引入边界来解决这个问题:

var str1 = "12345678";
var str2 = "123456789";
var reg = /^\d{8}$/;
//字符串str1能被成功匹配

//还可以使用下面的正则表达式进行匹配验证
var reg3 = /\b\d{8}\b/
//实质上\b是表示一连串符合\w的字符的前后位置
//元字符中\w的官方说明就是单词字符,其中包括了[A-z0-9_]
//所以我们可以通过以下正则表达式来获取一段英文的所有单词
var reg4 = /\b\w+\b/g;

  以上代码说明了:^ 表示字符串的开始位置;$ 表示字符串的结束位置; \b表示单词的开始或结束位置。

  关于边界就还剩下两个问题:

  a.^在正则表达式中存在多重含义:一种是在区间内作为开头表示非的意思,在边界上表示字符串的起始位置。

  b.非单词边界指的是什么?

//有如下字符串
var str = "this is my phone";
//需求:判断这段英文中有没有单词中包含is,但不是独立的一个is单词。
var reg = /\Bis/g;
//非单词边界意思就是不是单词的开头和结尾处

  关于属性,还有"i"和"m"分别具备什么功能?

//有需求:在一段英文中匹配到is这个单词,并且忽略大小写
var reg = /\b[iI][sS]\b/g;
//若采用i属性忽略大小写就可以写成
var regi = /\bis\b/ig;

//如果有这样一串字符串
var str = "ab\nacd\naef";
var regs = /^a\w+/g;
//匹配结果是:ab
var regm = /^a\w+/gm;
//匹配结果是:ab,acd,cef;

  i属性忽略字母大小写就不再多做解释了。

  m属性可能会有很多朋友不是很清楚,

  在这里如果要严格的理解"^"这个符号就是一行字符串开头的意思。

  所以,通过m属性匹配上面示例的结果就会有三个。

  (其实主要的问题是在于对“^”符号的的理解误区,通常我们在正则表达式内,这个符号在边界的意义都理解为字符串的开头,其实不然,准确的说是一行字符串的开头。)

6.分组与子表达式及反向引用

  关于分组对于表达式至关重要,后面的几个知识点都会围绕分组展开。

  如果只是分组,它本身是一个非常简单易懂的知识点:

1 var str = "abcdef";
2 //用正则表达式分组的形式按每组两个字符进行匹配
3 var reg = /(ab)(cd)(ef)/;

  以上示例中的正则表达式实际的匹配结果与/abcdef/没有任何区别,都是将整个str字符匹配出来。

  但是,本身看似没有任何意义反而成就了他的价值,就想HTML的div标签一样,实际没有任何特性的容器标签却成了HTML中最重要的一个标签。

  不扯远了,回到正则分组的本身,正则表达式有了分组,就像碳元素在高温环境下有了氧气;

  因为分组,产生了子表达式:

  在上面的示例中,正则表达式中的分组产生了三个子表达式:(ab),(cd),(ef)

//子表达式再上一个示例中没有什么价值
//如果有以下字符串(大驼峰命名规则)
var str = "AbafdcDfdefGhfdi";
//如果需要用正则表达式来验证的话,正则可以写成
var reg = /^([A-Z][a-z]+)+$/

  验证大驼峰命名法的字符串,就是应用了分组的子表达式重复匹配来简化代码。

  从这里开始,感觉正则表达式要走上风骚路线了,接下来看看反向引用

 1 //查找以下字符串中连续重复出现的单词,并且忽略大小写
 2 var str = "Is is the cost of of gasoline going up up?";
 3 var reg = /(\b[a-z]+\b) \1/ig;
 4 
 5 //匹配连续出现的字母组合的字符串片段
 6 var str1 = "abcabcabc";
 7 var reg1 = /^(\w{2})\1+$/;
 8 
 9 //匹配一下形式的字母组合的正则表达式
10 var str2 = "aabb";
11 var reg2 = /(\w)\1(\w)\2/g;

  刚接触反向引用事,看到上面的示例,我想每个人都会有这样的疑问:\1和\2是什么意思?

  这里的1和2所表示的就是第一个子表达式和第二个子表达式通过匹配获取到的对应的“字符串片段”的引用。

  以最后一个示例为例,匹配过程可以将其拆分成两个步骤:

  第一个步骤是子表达式匹配获得匹配结果:/(\w)a(\w)b/;  ——>子表达式优先匹配,获取匹配到的具体字符串片段,并传给引用自己的引用。

  第二个步骤就是将第一个步骤获取到的具体的表达式与字符串匹配。

  (提供一个记忆理解的方法:反向引用这个技术名称别只看着高大上,其实本质上已经通过语义化向我们传递了很多信息,数字n表示第几个子表达式,即为引用值。

  而反向即为将数字原本在正则表达式中表示的是一个字符,通过转义字符反转为一个引用对象;反向还有的第二层含义就是数字引用的不是子表达式的本身,

  而是通过子表达式匹配的对应字符串片段。)

7.条件或 —— |

  条件或其实与通常编程中的双竖线“||”是一个意思,只不过在正则表达式中只要写一个竖线“|”。

  示例说明:

//我们的手机号码不同的运营商,开头的三个数字都不同,而且每个运营商下都有好几个不同的开头数字。
//例如联通旗下有:130/131/132/155/156/185/186/145/176
//如果业务需求是要匹配所有的联通手机号码。请看下列代码:
var reg = /^(130|131|132|155|156|185|186|145|176)\d{8}$/;

  很简单的一个知识点,但是要借助分组来表示,所以就留到这里来讲了。

8.捕获与非捕获

  在解析捕获与非捕获前,我想先在这里添加一些内容,帮助更好的理解这一部分知识点。

  就是基于JavaScript关于正则表达式的一个操作方法:

  JavaScript的RegExp对象的exec()方法:

  不过在这里暂时不对方法的所有内容进行解析,只解析部分与捕获相关的内容。

1 //还是延用分组的示例,毕竟捕获是基于分组的
2 var str = "abcdef";
3 //用正则表达式分组的形式按每组两个字符进行匹配
4 var reg = /(ab)(cd)(ef)/;
5 //使用exec()方法获取到匹配结果
6 console.log(reg.exec(str));
7 //匹配结果是:["abcdef", "ab", "cd", "ef", index: 0, input: "abcdef", groups: undefined]

  在这个匹配结果里,类数组的第一个元素就是正则表达式匹配到的内容

  第二个元素:“ab”是第一个子表达式的匹配结果

  第三个元素:“cd”是第二个子表达式的匹配结果

  第四个元素:“ef”是第三个子表达式的匹配结果

  先不讨论,继续看以下示例

//在上面的示例基础上,正则表达式修改成
var reg = /(ab)(?:cd)(ef)/;
//使用exec()方法获取到匹配结果
console.log(reg.exec(str));
//匹配的结果是:["abcdef", "ab", "ef", index: 0, input: "abcdef", groups: undefined]

  这回的匹配结果发生了一个小小的变化。

  第二个子表达式的前面添加了“?:”,让匹配结果中没有出现第二个子表达式的对应元素;

  但是整个正则匹配结果,也就是类数组的第一个元素没有受到影响,还是和上一个示例的匹配结果完全一致。

  以上示例通过exec()方法展现出来的结果,就是捕获与非捕获的结果。

  捕获是正则表达式分组的一个特性,他会将每个分组即子表达式匹配到的结果提取出来,即为捕获。

  捕获产生了数据组,我们就可以通过反向引用的方式在正则表达式中,通过捕获数据组的“”键“”引用捕获值。(反向引用实现的底层原理)

  而非捕获就是在子表达式前面加上了“?:”,表示该组为非捕获组,非捕获组匹配的结果不会被提取,但是该组的匹配功能依然存在。

  看到以上的总结,大家可能视乎懂了捕获与非捕获,但是还是不知道捕获与非捕获有什么用途。

  请看以下示例:

var str = "aa11aa11aa11";
var reg1 = /((aa)(11))+/;
var reg2 = /(?:(aa)(11))+/;
console.log(reg1.exec(str));
//匹配结果是:["aa11aa11aa11", "aa11", "aa", "11", index: 0, input: "aa11aa11aa11", groups: undefined]
console.log(reg2.exec(str));
//匹配结果是:["aa11aa11aa11", "aa", "11", index: 0, input: "aa11aa11aa11", groups: undefined]

  上面的示例所展示的内容,可以看到一个区别,

  而恰恰是一个区别可以帮助我们解决一个巨大的困扰。

  在前面的总结中我们可以知道有了捕获数据可以被引用,

  但是在上面的这个示例的时候,当分组被嵌套的时候,

  “键”所对应的“值”就不会那么好对应了,比如上面示例的第一个匹配结果,如果在正则表达式中需要引用(aa)匹配的值,就是“\2”;

  非捕获也就是让被标注为非捕获组的对应匹配值不会出现在捕获数据内。

  

  很多朋友觉得捕获很难,我并不觉得,写了这么一大段我自己反而觉得累赘,看着就累,如果可以我觉得有下面一句话就可以了。

  被标注非捕获的分组,所匹配的字符串片段不能反向引用。

9.零宽断言

  零宽与断言这一部分,真的不难好吗?

  有多少人困在这一部分,点赞举手,我来告诉你们如何不难。

  我觉得这部分,难度不在知识点,而是在知识点的专业名称,我看到的和听到了就不下三种。

  所以我想先不解释理论和原理,直接看看怎么用,然后再解释原理。

 1 //如有需求:找到一个的开桑塔纳的车主(且名字为三个字)
 2 var str11 = "李小明开桑塔纳";
 3 var str12 = "王小明开福克斯";
 4 var reg1 = /^.{3}(?=开桑塔纳)/ 5 console.log(str11.match(reg1));
 6 console.log(str12.match(reg1));
 7 //输出结果:[李小明]
 8 //输出结果:null
 9 
10 
11 //有需要如:查找电话号码,电话号码前面的字符是“电话:”,但不能匹配该字段。
12 var str21 = "电话:15177775555";
13 var str22 = "金额:11111111111";
14 var reg2 = /(?<=电话:)1\d{10}/g;
15 console.log(str21.match(reg2));
16 console.log(str22.match(reg2));
17 //输出结果:[15177775555]
18 //输出结果:null
19 
20 //全局忽略大小写,查找后买没有all的is
21 var str3 = "Is this all there is";
22 var reg3 = /is(?! all)/gi;
23 console.log(str3.match(reg3));
24 //输出结果:["Is", "is"]
25 
26 
27 //假设有以下两个字符串,需要用正则判断不“美国芯片”
28 var str41 = "美国芯片";
29 var str42 = "中国芯片";
30 var reg4 = /(?;
31 console.log(str41.match(reg4));
32 console.log(str42.match(reg4));
33 //输出结果:null
34 //输出结果:["芯片", index: 2, input: "中国芯片", groups: undefined]

  我现在可以告诉你,零宽断言已经学完了,可能出现的四个特例在上面的实例中全部展示出来了。

  下面给大家介绍原理、特例(?=,?!,?<=,?

  在解释原理前,我们先来看看特例:

  xx(?=exp)表示查找xx,这个xx的后面必须跟着exp

  xx(?!exp)表示查找xx,这个xx的后面不能跟着exp

  (?<=exp)xx表示查找xx,这个xx的前面必须是exp

  (?

  零宽与断言的含义(即这两个专业名词描述了什么东西)

   断言:所谓断言,与通俗的表达是一回事,表示肯定什么的意思。这正则表达式内,断言就是表达“xx”字符串片段的前后肯定会出现什么样的情况。

  零宽:这个名称也是语义化的一个专业名称,大家发现所有四个特例都是以分组的方式写在正则表达式内,

     但是这样的分组不执行正则匹配,它的作用只是一个判断条件。也就是它不占用匹配的字符片段

  说了这么多,出一个小小的题,大家一起熟悉一下零宽断言:用正则表达式匹配获取一个网页的标题名称。

1 var str = "他乡踏雪的主页";
2 var reg = /(?<=).*(?=<\/title>)/<span style="color:#000000;">g;
</span><span style="color:#008080;">3</span> console.log(str.match(reg));</pre> 
    </div> 
    <span style="color:#33cccc;">点击"加号"查看结果</span> 
   </div> 
   <p>  接下来,就来解决名称的问题吧。这个问题就是个奇葩!</p> 
   <table border="1"> 
    <tbody> 
     <tr> 
      <td class="dy"> 正则表达式零宽断言的特例</td> 
      <td class="dyName1"> 第一类名称(参考百度百科)</td> 
      <td class="dyName2"> 第二类命名</td> 
     </tr> 
     <tr> 
      <td class="dy"> XX(?=exp)</td> 
      <td class="dyName1"> <strong>零宽度正预测先行断言</strong></td> 
      <td class="dyName2"> 正向前瞻</td> 
     </tr> 
     <tr> 
      <td class="dy"> XX(?!exp)</td> 
      <td class="dyName1"> <strong>零宽度负预测先行断言</strong></td> 
      <td class="dyName2"> 负向前瞻</td> 
     </tr> 
     <tr> 
      <td class="dy"> (?<=exp)xx</td> 
      <td class="dyName1"> <strong>零宽度正回顾后发断言</strong></td> 
      <td class="dyName2"> 正向后瞻</td> 
     </tr> 
     <tr> 
      <td class="dy"> (?<!exp)xx</td> 
      <td class="dyName1"> <strong>零宽度负回顾后发断言</strong></td> 
      <td class="dyName2"> 负向后瞻</td> 
     </tr> 
    </tbody> 
   </table> 
   <p>  <span style="color:#808080;">最后关于零宽断言,其实我也还有点疑惑,在很多博客和教程上见过说,js的正则不能用(?<=)和(?<!),我使用的是Chrome浏览器:版本 69.0.3452.0做的测试,没毛病,还望路过的大神指点一下,是不是真的有那个浏览器不兼容这两个零宽断言的特例。</span></p> 
   <p>10.贪婪与非贪婪</p> 
   <p>  这知识点几乎是正则表达式最冷门的一个,因为在日常开发中非常少用,特性本身也不太好驾驭。</p> 
   <p>  但是别小看它,千万别小看,我最后会给一个示例给大家看,你们就会明白。</p> 
   <p>  <span style="color:#808080;">那到底什么是贪婪模式和非贪婪模式呢?先看一个示例:</span></p> 
   <div class="cnblogs_code"> 
    <pre><span style="color:#008080;">1</span> <span style="color:#0000ff;">var</span> str = "abcaxcd"<span style="color:#000000;">;
</span><span style="color:#008080;">2</span> <span style="color:#0000ff;">var</span> reg = /ab.*c/<span style="color:#000000;">;
</span><span style="color:#008080;">3</span> <span style="color:#0000ff;">var</span> reg1 = /ab.*?c/<span style="color:#000000;">;
</span><span style="color:#008080;">4</span> <span style="color:#000000;">console.log(str.match(reg));
</span><span style="color:#008080;">5</span> <span style="color:#008000;">//</span><span style="color:#008000;">匹配到的结果是:abcaxcd</span>
<span style="color:#008080;">6</span> <span style="color:#000000;">console.log(str.match(reg1));
</span><span style="color:#008080;">7</span> <span style="color:#008000;">//</span><span style="color:#008000;">匹配到的结果是:abc</span></pre> 
   </div> 
   <p>  看到上面的示例后,两个正则表达式的差别就是在量词星号*的后面多了一个问号?</p> 
   <p>  这也就是贪婪与非贪婪的区别:</p> 
   <p>  <span style="color:#ff6600;">贪婪模式就是仅量词的最大值去匹配最多的相符的字符。</span></p> 
   <p><span style="color:#ff6600;">  非贪婪模式就是不管量词的最大范围有多大,只要是非贪婪模式就尽可能的少匹配字符。</span></p> 
   <p>  但是,有一种例外:</p> 
   <div class="cnblogs_code"> 
    <pre><span style="color:#0000ff;">var</span> str = "abcaxcd"<span style="color:#000000;">;
</span><span style="color:#0000ff;">var</span> reg = /ab.*?d/<span style="color:#000000;">;
console.log(str.match(reg));
</span><span style="color:#008000;">//</span><span style="color:#008000;">匹配结果是:abcaxcd</span></pre> 
   </div> 
   <p>  这种例外就是,当一个执行非贪婪模式匹配的字符后面,有一个匹配字符可以字符,贪婪模式会延伸,直到后面的字符被匹配到的前面结束匹配。</p> 
   <p>  记住,一定是后面的字符有可能被匹配到的情况下,否则匹配结果为null</p> 
   <p>  <span style="color:#808080;">接下来干点正事,关于贪婪模式与非贪婪模式的语法是应该正式的介绍一下了:</span></p> 
   <table class="tlTable" border="1"> 
    <tbody> 
     <tr> 
      <td class="tlItem"> 贪婪模式的量词表示</td> 
      <td class=""tlItem"> 非贪婪模式的量词表示</td> 
     </tr> 
     <tr> 
      <td class=""tlItem"> n*</td> 
      <td class=""tlItem"> n*?</td> 
     </tr> 
     <tr> 
      <td class=""tlItem"> n+</td> 
      <td class=""tlItem"> n+?</td> 
     </tr> 
     <tr> 
      <td class=""tlItem"> n?</td> 
      <td class=""tlItem">n??</td> 
     </tr> 
     <tr> 
      <td class=""tlItem"> n{x}</td> 
      <td class=""tlItem">n{x} ?</td> 
     </tr> 
     <tr> 
      <td class=""tlItem"> n{x,}</td> 
      <td class=""tlItem">n{x,} ?</td> 
     </tr> 
     <tr> 
      <td class=""tlItem"> n{x,y}</td> 
      <td class=""tlItem">n{x,y} ?</td> 
     </tr> 
    </tbody> 
   </table> 
   <p><span style="color:#808080;">   <span style="color:#000000;">最后对线承诺,放大招,贪婪和非贪婪组合断言特性,看看以下示例:</span></span></p> 
   <div class="cnblogs_code"> 
    <pre><span style="color:#008080;">1</span> <span style="color:#008000;">//</span><span style="color:#008000;">有需求时:保留一下HTML文档中的innerHTML和hr标签</span>
<span style="color:#008080;">2</span> <span style="color:#0000ff;">var</span> str = "<p><a href='http://www.cnblogs.com/rubylouvre/'>Ruby Louvre</a></p><hr/><p>by <em>司徒正美</em></p>"<span style="color:#000000;">;
</span><span style="color:#008080;">3</span> <span style="color:#0000ff;">var</span> reg = /<(?!hr)(?:.|\s)*?>/<span style="color:#000000;">ig;
</span><span style="color:#008080;">4</span> console.log(str.replace(reg,""<span style="color:#000000;">));
</span><span style="color:#008080;">5</span> <span style="color:#008000;">//</span><span style="color:#008000;">打印结果是:Ruby Louvre<hr/>by 司徒正美</span></pre> 
   </div> 
   <p> </p> 
   <p>  关于正则表达式的基础内容总结就在以上全部内容了,</p> 
   <p>  后续还会有关于js正则应用的方法的具体解析,</p> 
   <p>  然后就是具体的正则表达式通式的归纳,</p> 
   <p>  还有正则表达式的面试习题,还希望大家能多多提供一些资源。</p> 
  </div> 
  <p>转载于:https://www.cnblogs.com/ZheOneAndOnly/p/9944659.html</p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1288819642315382784"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(正则表达式基于JavaScript的入门详解)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1835514462770130944.htm"
                           title="斤斤计较的婚姻到底有多难?" target="_blank">斤斤计较的婚姻到底有多难?</a>
                        <span class="text-muted">白心之岂必有为</span>

                        <div>很多人私聊我会问到在哪个人群当中斤斤计较的人最多?我都会回答他,一般婚姻出现问题的斤斤计较的人士会非常多,以我多年经验,在婚姻落的一塌糊涂的人当中,斤斤计较的人数占比在20~30%以上,也就是说10个婚姻出现问题的斤斤计较的人有2-3个有多不减。在婚姻出问题当中,有大量的心理不平衡的、尖酸刻薄的怨妇。在婚姻中仅斤斤计较有两种类型:第一种是物质上的,另一种是精神上的。在物质与精神上抠门已经严重的影响</div>
                    </li>
                    <li><a href="/article/1835514464028422144.htm"
                           title="情绪觉察日记第37天" target="_blank">情绪觉察日记第37天</a>
                        <span class="text-muted">露露_e800</span>

                        <div>今天是家庭关系规划师的第二阶最后一天,慧萍老师帮我做了个案,帮我处理了埋在心底好多年的一份恐惧,并给了我深深的力量!这几天出来学习,爸妈过来婆家帮我带小孩,妈妈出于爱帮我收拾东西,并跟我先生和婆婆产生矛盾,妈妈觉得他们没有照顾好我…。今晚回家见到妈妈,我很欣赏她并赞扬她,妈妈说今晚要跟我睡我说好,当我们俩躺在床上准备睡觉的时候,我握着妈妈的手对她说:妈妈这几天辛苦你了,你看你多利害把我们的家收拾得</div>
                    </li>
                    <li><a href="/article/1835514335561084928.htm"
                           title="芦花鞋一四" target="_blank">芦花鞋一四</a>
                        <span class="text-muted">许叶晗</span>

                        <div>又是在一个寒冷的夏日里,青铜和葵花决定今天一起去卖芦花鞋,奶奶亲手给他们做了一碗热乎乎的粥对他们说:“就靠你们两挣生活费了这碗粥赶紧趁热喝了吧!”于是青铜和葵花喝完了奶奶给她们做的粥,就准备去镇上卖卢花鞋,这回青铜和葵花穿着新的芦花鞋来到了镇上。青铜这回看到了很多人都在卖,用手势表达对葵花说:“这回有好多人在抢我们生意呢!我们必须得吆喝起来。”葵花点了点头。可是谁知他们也大声的叫,卖芦花喽!卖芦花</div>
                    </li>
                    <li><a href="/article/1835514307744460800.htm"
                           title="QQ群采集助手,精准引流必备神器" target="_blank">QQ群采集助手,精准引流必备神器</a>
                        <span class="text-muted">2401_87347160</span>
<a class="tag" taget="_blank" href="/search/%E5%85%B6%E4%BB%96/1.htm">其他</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a>
                        <div>功能概述微信群查找与筛选工具是一款专为微信用户设计的辅助工具,它通过关键词搜索功能,帮助用户快速找到相关的微信群,并提供筛选是否需要验证的群组的功能。主要功能关键词搜索:用户可以输入关键词,工具将自动查找包含该关键词的微信群。筛选功能:工具提供筛选机制,用户可以选择是否只显示需要验证或不需要验证的群组。精准引流:通过上述功能,用户可以更精准地找到目标群组,进行有效的引流操作。3.设备需求该工具可以</div>
                    </li>
                    <li><a href="/article/1835514207114719232.htm"
                           title="关于沟通这件事,项目经理不需要每次都面对面进行" target="_blank">关于沟通这件事,项目经理不需要每次都面对面进行</a>
                        <span class="text-muted">流程大师兄</span>

                        <div>很多项目经理都会遇到这样的问题,项目中由于事情太多,根本没有足够的时间去召开会议,那在这种情况下如何去有效地管理项目中的利益相关者?当然,不建议电子邮件也不需要开会的话,建议可以采取下面几种方式来形成有效的沟通,这几种方式可以帮助你努力的通过各种办法来保持和各方面的联系。项目经理首先要问自己几个问题,项目中哪些利益相关者是必须要进行沟通的?可以列出项目中所有的利益相关者清单,同时也整理出项目中哪些</div>
                    </li>
                    <li><a href="/article/1835513803861749760.htm"
                           title="机器学习与深度学习间关系与区别" target="_blank">机器学习与深度学习间关系与区别</a>
                        <span class="text-muted">ℒℴѵℯ心·动ꦿ໊ོ꫞</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>一、机器学习概述定义机器学习(MachineLearning,ML)是一种通过数据驱动的方法,利用统计学和计算算法来训练模型,使计算机能够从数据中学习并自动进行预测或决策。机器学习通过分析大量数据样本,识别其中的模式和规律,从而对新的数据进行判断。其核心在于通过训练过程,让模型不断优化和提升其预测准确性。主要类型1.监督学习(SupervisedLearning)监督学习是指在训练数据集中包含输入</div>
                    </li>
                    <li><a href="/article/1835513701143244800.htm"
                           title="铭刻于星(四十二)" target="_blank">铭刻于星(四十二)</a>
                        <span class="text-muted">随风至</span>

                        <div>69夜晚,绍敏同学做完功课后,看了眼房外,没听到动静才敢从书包的夹层里拿出那个心形纸团。折痕压得很深,都有些旧了,想来是已经写好很久了。绍敏同学慢慢地、轻轻地捏开折叠处,待到全部拆开后,又反复抚平纸张,然后仔细地一字字默看。只是开头的三个字是第一次看到,让她心漏跳了几拍。“亲爱的绍敏:从四年级的时候,我就喜欢你了,但是我一直不敢说,怕影响你学习。六年级的时候听说有人跟你表白,你接受了,我很难过,但</div>
                    </li>
                    <li><a href="/article/1835513570171908096.htm"
                           title="底层逆袭到底有多难,不甘平凡的你准备好了吗?让吴起给你说说" target="_blank">底层逆袭到底有多难,不甘平凡的你准备好了吗?让吴起给你说说</a>
                        <span class="text-muted">造命者说</span>

                        <div>底层逆袭到底有多难,不甘平凡的你准备好了吗?让吴起给你说说我叫吴起,生于公元前440年的战国初期,正是群雄并起、天下纷争不断的时候。后人说我是军事家、政治家、改革家,是兵家代表人物。评价我一生历仕鲁、魏、楚三国,通晓兵家、法家、儒家三家思想,在内政军事上都有极高的成就。周安王二十一年(公元前381年),因变法得罪守旧贵族,被人乱箭射死。我出生在卫国一个“家累万金”的富有家庭,从年轻时候起就不甘平凡</div>
                    </li>
                    <li><a href="/article/1835513571501502464.htm"
                           title="2020-01-25" target="_blank">2020-01-25</a>
                        <span class="text-muted">晴岚85</span>

                        <div>郑海燕坚持分享590天2020.1.24在生活中只存在两个问题。一个问题是:你知道想要达成的目标是什么,但却不知道如何才能达成;另一个问题是:你不知道你的目标是什么。前一个是行动的问题,后一个是结果的问题。通过制定具体的下一步行动,可以解决不知道如何开始行动的问题。而通过去想象结果,对结果做预估,可以解决找不着目标的问题。对于所有吸引我们注意力,想要完成的任务,你可以先想象一下,预期的结果究竟是什</div>
                    </li>
                    <li><a href="/article/1835513568917811200.htm"
                           title="随笔 | 仙一般的灵气" target="_blank">随笔 | 仙一般的灵气</a>
                        <span class="text-muted">海思沧海</span>

                        <div>仙岛今天,我看了你全部,似乎已经进入你的世界我不知道,这是否是梦幻,还是你仙一般的灵气吸引了我也许每一个人都要有一份属于自己的追求,这样才能够符合人生的梦想,生活才能够充满着阳光与快乐我不知道,我为什么会这样的感叹,是在感叹自己的人生,还是感叹自己一直没有孜孜不倦的追求只感觉虚度了光阴,每天活在自己的梦中,活在一个不真实的世界是在逃避自己,还是在逃避周围的一切有时候我嘲笑自己,嘲笑自己如此的虚无,</div>
                    </li>
                    <li><a href="/article/1835513567663714304.htm"
                           title="想家" target="_blank">想家</a>
                        <span class="text-muted">爆米花机</span>

                        <div>也许不同于大家对家乡的思念,我对家乡甚至是疯狂的不舍。还未踏出车站就感觉到幸福,我享受这里的夕阳、这里的浓烈柴火味、这里每一口家常菜。我是宅女,我贪恋家的安逸。刚刚踏出大学校门,初出茅庐,无法适应每年只能国庆和春节回家。我焦虑、失眠、无端发脾气,是无法适应工作的节奏,是无法接受我将一步步离开家乡的事实。我不想承认自己胸无大志,选择再次踏上征程。图片发自App</div>
                    </li>
                    <li><a href="/article/1835513551624695808.htm"
                           title="【iOS】MVC设计模式" target="_blank">【iOS】MVC设计模式</a>
                        <span class="text-muted">Magnetic_h</span>
<a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/objective-c/1.htm">objective-c</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a>
                        <div>MVC前言如何设计一个程序的结构,这是一门专门的学问,叫做"架构模式"(architecturalpattern),属于编程的方法论。MVC模式就是架构模式的一种。它是Apple官方推荐的App开发架构,也是一般开发者最先遇到、最经典的架构。MVC各层controller层Controller/ViewController/VC(控制器)负责协调Model和View,处理大部分逻辑它将数据从Mod</div>
                    </li>
                    <li><a href="/article/1835513551142350848.htm"
                           title="OC语言多界面传值五大方式" target="_blank">OC语言多界面传值五大方式</a>
                        <span class="text-muted">Magnetic_h</span>
<a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a><a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/objective-c/1.htm">objective-c</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>前言在完成暑假仿写项目时,遇到了许多需要用到多界面传值的地方,这篇博客来总结一下比较常用的五种多界面传值的方式。属性传值属性传值一般用前一个界面向后一个界面传值,简单地说就是通过访问后一个视图控制器的属性来为它赋值,通过这个属性来做到从前一个界面向后一个界面传值。首先在后一个界面中定义属性@interfaceBViewController:UIViewController@propertyNSSt</div>
                    </li>
                    <li><a href="/article/1835513440525971456.htm"
                           title="一百九十四章. 自相矛盾" target="_blank">一百九十四章. 自相矛盾</a>
                        <span class="text-muted">巨木擎天</span>

                        <div>唉!就这么一夜,林子感觉就像过了很多天似的,先是回了阳间家里,遇到了那么多不可思议的事情儿。特别是小伙伴们,第二次与自己见面时,僵硬的表情和恐怖的气氛,让自己如坐针毡,打从心眼里难受!还有东子,他现在还好吗?有没有被人欺负?护城河里的小鱼小虾们,还都在吗?水不会真的干枯了吧?那对相亲相爱漂亮的太平鸟儿,还好吧!春天了,到了做窝、下蛋、喂养小鸟宝宝的时候了,希望它们都能够平安啊!虽然没有看见家人,也</div>
                    </li>
                    <li><a href="/article/1835513424734416896.htm"
                           title="UI学习——cell的复用和自定义cell" target="_blank">UI学习——cell的复用和自定义cell</a>
                        <span class="text-muted">Magnetic_h</span>
<a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>目录cell的复用手动(非注册)自动(注册)自定义cellcell的复用在iOS开发中,单元格复用是一种提高表格(UITableView)和集合视图(UICollectionView)滚动性能的技术。当一个UITableViewCell或UICollectionViewCell首次需要显示时,如果没有可复用的单元格,则视图会创建一个新的单元格。一旦这个单元格滚动出屏幕,它就不会被销毁。相反,它被添</div>
                    </li>
                    <li><a href="/article/1835512920797179904.htm"
                           title="element实现动态路由+面包屑" target="_blank">element实现动态路由+面包屑</a>
                        <span class="text-muted">软件技术NINI</span>
<a class="tag" taget="_blank" href="/search/vue%E6%A1%88%E4%BE%8B/1.htm">vue案例</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>el-breadcrumb是ElementUI组件库中的一个面包屑导航组件,它用于显示当前页面的路径,帮助用户快速理解和导航到应用的各个部分。在Vue.js项目中,如果你已经安装了ElementUI,就可以很方便地使用el-breadcrumb组件。以下是一个基本的使用示例:安装ElementUI(如果你还没有安装的话):你可以通过npm或yarn来安装ElementUI。bash复制代码npmi</div>
                    </li>
                    <li><a href="/article/1835512809883004928.htm"
                           title="10月|愿你的青春不负梦想-读书笔记-01" target="_blank">10月|愿你的青春不负梦想-读书笔记-01</a>
                        <span class="text-muted">Tracy的小书斋</span>

                        <div>本书的作者是俞敏洪,大家都很熟悉他了吧。俞敏洪老师是我行业的领头羊吧,也是我事业上的偶像。本日摘录他书中第一章中的金句:『一个人如果什么目标都没有,就会浑浑噩噩,感觉生命中缺少能量。能给我们能量的,是对未来的期待。第一件事,我始终为了进步而努力。与其追寻全世界的骏马,不如种植丰美的草原,到时骏马自然会来。第二件事,我始终有阶段性的目标。什么东西能给我能量?答案是对未来的期待。』读到这里的时候,我便</div>
                    </li>
                    <li><a href="/article/1835512542735200256.htm"
                           title="C语言宏函数" target="_blank">C语言宏函数</a>
                        <span class="text-muted">南林yan</span>
<a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80/1.htm">C语言</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a>
                        <div>一、什么是宏函数?通过宏定义的函数是宏函数。如下,编译器在预处理阶段会将Add(x,y)替换为((x)*(y))#defineAdd(x,y)((x)*(y))#defineAdd(x,y)((x)*(y))intmain(){inta=10;intb=20;intd=10;intc=Add(a+d,b)*2;cout<<c<<endl;//800return0;}二、为什么要使用宏函数使用宏函数</div>
                    </li>
                    <li><a href="/article/1835512305320816640.htm"
                           title="地推话术,如何应对地推过程中家长的拒绝" target="_blank">地推话术,如何应对地推过程中家长的拒绝</a>
                        <span class="text-muted">校师学</span>

                        <div>相信校长们在做地推的时候经常遇到这种情况:市场专员反馈家长不接单,咨询师反馈难以邀约这些家长上门,校区地推疲软,招生难。为什么?仅从地推层面分析,一方面因为家长受到的信息轰炸越来越多,对信息越来越“免疫”;而另一方面地推人员的专业能力和营销话术没有提高,无法应对家长的拒绝,对有意向的家长也不知如何跟进,眼睁睁看着家长走远;对于家长的疑问,更不知道如何有技巧地回答,机会白白流失。由于回答没技巧和专业</div>
                    </li>
                    <li><a href="/article/1835512178023690240.htm"
                           title="谢谢你们,爱你们!" target="_blank">谢谢你们,爱你们!</a>
                        <span class="text-muted">鹿游儿</span>

                        <div>昨天家人去泡温泉,二个孩子也带着去,出发前一晚,匆匆下班,赶回家和孩子一起收拾。饭后,我拿出笔和本子(上次去澳门时做手帐的本子)写下了1\2\3\4\5\6\7\8\9,让后让小壹去思考,带什么出发去旅游呢?她在对应的数字旁边画上了,泳衣、泳圈、肖恩、内衣内裤、tapuy、拖鞋……画完后,就让她自己对着这个本子,将要带的,一一带上,没想到这次带的书还是这本《便便工厂》(晚上姑婆发照片过来,妹妹累得</div>
                    </li>
                    <li><a href="/article/1835511911769272320.htm"
                           title="C语言如何定义宏函数?" target="_blank">C语言如何定义宏函数?</a>
                        <span class="text-muted">小九格物</span>
<a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a>
                        <div>在C语言中,宏函数是通过预处理器定义的,它在编译之前替换代码中的宏调用。宏函数可以模拟函数的行为,但它们不是真正的函数,因为它们在编译时不会进行类型检查,也不会分配存储空间。宏函数的定义通常使用#define指令,后面跟着宏的名称和参数列表,以及宏展开后的代码。宏函数的定义方式:1.基本宏函数:这是最简单的宏函数形式,它直接定义一个表达式。#defineSQUARE(x)((x)*(x))2.带参</div>
                    </li>
                    <li><a href="/article/1835511912192897024.htm"
                           title="微服务下功能权限与数据权限的设计与实现" target="_blank">微服务下功能权限与数据权限的设计与实现</a>
                        <span class="text-muted">nbsaas-boot</span>
<a class="tag" taget="_blank" href="/search/%E5%BE%AE%E6%9C%8D%E5%8A%A1/1.htm">微服务</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a>
                        <div>在微服务架构下,系统的功能权限和数据权限控制显得尤为重要。随着系统规模的扩大和微服务数量的增加,如何保证不同用户和服务之间的访问权限准确、细粒度地控制,成为设计安全策略的关键。本文将讨论如何在微服务体系中设计和实现功能权限与数据权限控制。1.功能权限与数据权限的定义功能权限:指用户或系统角色对特定功能的访问权限。通常是某个用户角色能否执行某个操作,比如查看订单、创建订单、修改用户资料等。数据权限:</div>
                    </li>
                    <li><a href="/article/1835511912843014144.htm"
                           title="理解Gunicorn:Python WSGI服务器的基石" target="_blank">理解Gunicorn:Python WSGI服务器的基石</a>
                        <span class="text-muted">范范0825</span>
<a class="tag" taget="_blank" href="/search/ipython/1.htm">ipython</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>理解Gunicorn:PythonWSGI服务器的基石介绍Gunicorn,全称GreenUnicorn,是一个为PythonWSGI(WebServerGatewayInterface)应用设计的高效、轻量级HTTP服务器。作为PythonWeb应用部署的常用工具,Gunicorn以其高性能和易用性著称。本文将介绍Gunicorn的基本概念、安装和配置,帮助初学者快速上手。1.什么是Gunico</div>
                    </li>
                    <li><a href="/article/1835511669476913152.htm"
                           title="小丽成长记(四十三)" target="_blank">小丽成长记(四十三)</a>
                        <span class="text-muted">玲玲54321</span>

                        <div>小丽发现,即使她好不容易调整好自己的心态下一秒总会有不确定的伤脑筋的事出现,一个接一个的问题,人生就没有停下的时候,小问题不断出现。不过她今天看的书,她接受了人生就是不确定的,厉害的人就是不断创造确定性,在Ta的领域比别人多的确定性就能让自己脱颖而出,显示价值从而获得的比别人多的利益。正是这样的原因,因为从前修炼自己太少,使得她现在在人生道路上打怪起来困难重重,她似乎永远摆脱不了那种无力感,有种习</div>
                    </li>
                    <li><a href="/article/1835511542284644352.htm"
                           title="学点心理知识,呵护孩子健康" target="_blank">学点心理知识,呵护孩子健康</a>
                        <span class="text-muted">静候花开_7090</span>

                        <div>昨天听了华中师范大学教育管理学系副教授张玲老师的《哪里才是学生心理健康的最后庇护所,超越教育与技术的思考》的讲座。今天又重新学习了一遍,收获匪浅。张玲博士也注意到了当今社会上的孩子由于心理问题导致的自残、自杀及伤害他人等恶性事件。她向我们普及了一个重要的命题,她说心理健康的一些基本命题,我们与我们通常的一些教育命题是不同的,她还举了几个例子,让我们明白我们原来以为的健康并非心理学上的健康。比如如果</div>
                    </li>
                    <li><a href="/article/1835511163450912768.htm"
                           title="2021年12月19日,春蕾教育集团团建活动感受——黄晓丹" target="_blank">2021年12月19日,春蕾教育集团团建活动感受——黄晓丹</a>
                        <span class="text-muted">黄错错加油</span>

                        <div>感受:1.从陌生到熟悉的过程。游戏环节让我们在轻松的氛围中得到了锻炼,也增长了不少知识。2.游戏过程中,我们贡献的是个人力量,展现的是团队的力量。它磨合的往往不止是工作的熟悉,更是观念上契合度的贴近。3.这和工作是一样的道理。在各自的岗位上,每个人摆正自己的位置、各司其职充分发挥才能,并团结一致劲往一处使,才能实现最大的成功。新知:1.团队精神需要不断地创新。过去,人们把创新看作是冒风险,现在人们</div>
                    </li>
                    <li><a href="/article/1835511036317364224.htm"
                           title="Cell Insight | 单细胞测序技术又一新发现,可用于HIV-1和Mtb共感染个体诊断" target="_blank">Cell Insight | 单细胞测序技术又一新发现,可用于HIV-1和Mtb共感染个体诊断</a>
                        <span class="text-muted">尐尐呅</span>

                        <div>结核病是艾滋病合并其他疾病中导致患者死亡的主要原因。其中结核病由结核分枝杆菌(Mycobacteriumtuberculosis,Mtb)感染引起,获得性免疫缺陷综合症(艾滋病)由人免疫缺陷病毒(Humanimmunodeficiencyvirustype1,HIV-1)感染引起。国家感染性疾病临床医学研究中心/深圳市第三人民医院张国良团队携手深圳华大生命科学研究院吴靓团队,共同研究得出单细胞测序</div>
                    </li>
                    <li><a href="/article/1835511030260789248.htm"
                           title="c++ 的iostream 和 c++的stdio的区别和联系" target="_blank">c++ 的iostream 和 c++的stdio的区别和联系</a>
                        <span class="text-muted">黄卷青灯77</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/iostream/1.htm">iostream</a><a class="tag" taget="_blank" href="/search/stdio/1.htm">stdio</a>
                        <div>在C++中,iostream和C语言的stdio.h都是用于处理输入输出的库,但它们在设计、用法和功能上有许多不同。以下是两者的区别和联系:区别1.编程风格iostream(C++风格):C++标准库中的输入输出流类库,支持面向对象的输入输出操作。典型用法是cin(输入)和cout(输出),使用>操作符来处理数据。更加类型安全,支持用户自定义类型的输入输出。#includeintmain(){in</div>
                    </li>
                    <li><a href="/article/1835510909070569472.htm"
                           title="瑶池防线" target="_blank">瑶池防线</a>
                        <span class="text-muted">谜影梦蝶</span>

                        <div>冥华虽然逃过了影梦的军队,但他是一个忠臣,他选择上报战况。败给影梦后成逃兵,高层亡尔还活着,七重天失守......随便一条,即可处死冥华。冥华自然是知道以仙界高层的习性此信一发自己必死无疑,但他还选择上报实情,因为责任。同样此信送到仙宫后,知道此事的人,大多数人都认定冥华要完了,所以上到仙界高层,下到扫大街的,包括冥华自己,全都准备好迎接冥华之死。如果仙界现在还属于两方之争的话,冥华必死无疑。然而</div>
                    </li>
                    <li><a href="/article/1835510656011431936.htm"
                           title="爬山后遗症" target="_blank">爬山后遗症</a>
                        <span class="text-muted">璃绛</span>

                        <div>爬山,攀登,一步一步走向制高点,是一种挑战。成功抵达是一种无法言语的快乐,在山顶吹吹风,看看风景,这是从未有过的体验。然而,爬山一时爽,下山腿打颤,颠簸的路,一路向下走,腿部力量不够,走起来抖到不行,停不下来了!第二天必定腿疼,浑身酸痛,坐立难安!</div>
                    </li>
                                <li><a href="/article/123.htm"
                                       title="js动画html标签(持续更新中)" target="_blank">js动画html标签(持续更新中)</a>
                                    <span class="text-muted">843977358</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/%E5%8A%A8%E7%94%BB/1.htm">动画</a><a class="tag" taget="_blank" href="/search/media/1.htm">media</a><a class="tag" taget="_blank" href="/search/opacity/1.htm">opacity</a>
                                    <div>1.jQuery 效果 - animate() 方法    改变 "div" 元素的高度:    $(".btn1").click(function(){      $("#box").animate({height:"300px</div>
                                </li>
                                <li><a href="/article/250.htm"
                                       title="springMVC学习笔记" target="_blank">springMVC学习笔记</a>
                                    <span class="text-muted">caoyong</span>
<a class="tag" taget="_blank" href="/search/springMVC/1.htm">springMVC</a>
                                    <div>1、搭建开发环境 
   a>、添加jar文件,在ioc所需jar包的基础上添加spring-web.jar,spring-webmvc.jar 
   b>、在web.xml中配置前端控制器 
      <servlet> 
    &nbs</div>
                                </li>
                                <li><a href="/article/377.htm"
                                       title="POI中设置Excel单元格格式" target="_blank">POI中设置Excel单元格格式</a>
                                    <span class="text-muted">107x</span>
<a class="tag" taget="_blank" href="/search/poi/1.htm">poi</a><a class="tag" taget="_blank" href="/search/style/1.htm">style</a><a class="tag" taget="_blank" href="/search/%E5%88%97%E5%AE%BD/1.htm">列宽</a><a class="tag" taget="_blank" href="/search/%E5%90%88%E5%B9%B6%E5%8D%95%E5%85%83%E6%A0%BC/1.htm">合并单元格</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E6%8D%A2%E8%A1%8C/1.htm">自动换行</a>
                                    <div>引用:http://apps.hi.baidu.com/share/detail/17249059 
POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 
先获取工作薄对象: 
HSSFWorkbook wb = new HSSFWorkbook(); 
HSSFSheet sheet = wb.createSheet(); 
HSSFCellStyle setBorder = wb.</div>
                                </li>
                                <li><a href="/article/504.htm"
                                       title="jquery 获取A href 触发js方法的this参数 无效的情况" target="_blank">jquery 获取A href 触发js方法的this参数 无效的情况</a>
                                    <span class="text-muted">一炮送你回车库</span>
<a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a>
                                    <div>html如下:  
<td class=\"bord-r-n bord-l-n c-333\"> 
<a class=\"table-icon edit\" onclick=\"editTrValues(this);\">修改</a> 
</td>" 
  
j</div>
                                </li>
                                <li><a href="/article/631.htm"
                                       title="md5" target="_blank">md5</a>
                                    <span class="text-muted">3213213333332132</span>
<a class="tag" taget="_blank" href="/search/MD5/1.htm">MD5</a>
                                    <div>
import java.security.MessageDigest;  
import java.security.NoSuchAlgorithmException;  
  
public class MDFive {  
    public static void main(String[] args) {  
        String md5Str = "cq</div>
                                </li>
                                <li><a href="/article/758.htm"
                                       title="完全卸载干净Oracle11g" target="_blank">完全卸载干净Oracle11g</a>
                                    <span class="text-muted">sophia天雪</span>
<a class="tag" taget="_blank" href="/search/orale%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">orale数据库</a><a class="tag" taget="_blank" href="/search/%E5%8D%B8%E8%BD%BD%E5%B9%B2%E5%87%80/1.htm">卸载干净</a><a class="tag" taget="_blank" href="/search/%E6%B8%85%E7%90%86%E6%B3%A8%E5%86%8C%E8%A1%A8/1.htm">清理注册表</a>
                                    <div>完全卸载干净Oracle11g 
A、存在OUI卸载工具的情况下: 
    第一步:停用所有Oracle相关的已启动的服务; 
    第二步:找到OUI卸载工具:在“开始”菜单中找到“oracle_OraDb11g_home”文件夹中 
        &</div>
                                </li>
                                <li><a href="/article/885.htm"
                                       title="apache 的access.log 日志文件太大如何解决" target="_blank">apache 的access.log 日志文件太大如何解决</a>
                                    <span class="text-muted">darkranger</span>
<a class="tag" taget="_blank" href="/search/apache/1.htm">apache</a>
                                    <div>CustomLog logs/access.log common  此写法导致日志数据一致自增变大。 
直接注释上面的语法 
#CustomLog logs/access.log common 
增加: 
CustomLog "|bin/rotatelogs.exe -l logs/access-%Y-%m-d.log </div>
                                </li>
                                <li><a href="/article/1012.htm"
                                       title="Hadoop单机模式环境搭建关键步骤" target="_blank">Hadoop单机模式环境搭建关键步骤</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a>
                                    <div>        Hadoop环境需要sshd服务一直开启,故,在服务器上需要按照ssh服务,以Ubuntu Linux为例,按照ssh服务如下: 
sudo apt-get install ssh 
sudo apt-get install rsync 
编辑HADOOP_HOME/conf/hadoop-env.sh文件,将JAVA_HOME设置为Java</div>
                                </li>
                                <li><a href="/article/1139.htm"
                                       title="PL/SQL DEVELOPER 使用的一些技巧" target="_blank">PL/SQL DEVELOPER 使用的一些技巧</a>
                                    <span class="text-muted">atongyeye</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a>
                                    <div>1 记住密码  
 
这是个有争议的功能,因为记住密码会给带来数据安全的问题。 但假如是开发用的库,密码甚至可以和用户名相同,每次输入密码实在没什么意义,可以考虑让PLSQL Developer记住密码。 位置:Tools菜单--Preferences--Oracle--Logon HIstory--Store with password 
 
 
2 特殊Copy  
 
在SQL Window</div>
                                </li>
                                <li><a href="/article/1266.htm"
                                       title="PHP:在对象上动态添加一个新的方法" target="_blank">PHP:在对象上动态添加一个新的方法</a>
                                    <span class="text-muted">bardo</span>
<a class="tag" taget="_blank" href="/search/%E6%96%B9%E6%B3%95/1.htm">方法</a><a class="tag" taget="_blank" href="/search/%E5%8A%A8%E6%80%81%E6%B7%BB%E5%8A%A0/1.htm">动态添加</a><a class="tag" taget="_blank" href="/search/%E9%97%AD%E5%8C%85/1.htm">闭包</a>
                                    <div>有关在一个对象上动态添加方法,如果你来自Ruby语言或您熟悉这门语言,你已经知道它是什么...... Ruby提供给你一种方式来获得一个instancied对象,并给这个对象添加一个额外的方法。 
  
好!不说Ruby了,让我们来谈谈PHP 
  
PHP未提供一个“标准的方式”做这样的事情,这也是没有核心的一部分... 
  
但无论如何,它并没有说我们不能做这样</div>
                                </li>
                                <li><a href="/article/1393.htm"
                                       title="ThreadLocal与线程安全" target="_blank">ThreadLocal与线程安全</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a><a class="tag" taget="_blank" href="/search/threadLocal/1.htm">threadLocal</a>
                                    <div>首先来看一下线程安全问题产生的两个前提条件:  
1.数据共享,多个线程访问同样的数据。  
2.共享数据是可变的,多个线程对访问的共享数据作出了修改。  
  
实例: 
        定义一个共享数据: 
public static int a = 0; 
        </div>
                                </li>
                                <li><a href="/article/1520.htm"
                                       title="Tomcat 架包冲突解决" target="_blank">Tomcat 架包冲突解决</a>
                                    <span class="text-muted">征客丶</span>
<a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a>
                                    <div>环境: 
Tomcat 7.0.6 
win7 x64 
 
错误表象:【我的冲突的架包是:catalina.jar 与 tomcat-catalina-7.0.61.jar 冲突,不知道其他架包冲突时是不是也报这个错误】 
严重: End event threw exception 
java.lang.NoSuchMethodException: org.apache.catalina.dep</div>
                                </li>
                                <li><a href="/article/1647.htm"
                                       title="【Scala三】分析Spark源代码总结的Scala语法一" target="_blank">【Scala三】分析Spark源代码总结的Scala语法一</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a>
                                    <div>Scala语法 1. classOf运算符 
Scala中的classOf[T]是一个class对象,等价于Java的T.class,比如classOf[TextInputFormat]等价于TextInputFormat.class 
   2. 方法默认值 
defaultMinPartitions就是一个默认值,类似C++的方法默认值 
  
  
 </div>
                                </li>
                                <li><a href="/article/1774.htm"
                                       title="java 线程池管理机制" target="_blank">java 线程池管理机制</a>
                                    <span class="text-muted">BlueSkator</span>
<a class="tag" taget="_blank" href="/search/java%E7%BA%BF%E7%A8%8B%E6%B1%A0/1.htm">java线程池</a><a class="tag" taget="_blank" href="/search/%E7%AE%A1%E7%90%86%E6%9C%BA%E5%88%B6/1.htm">管理机制</a>
                                    <div>编辑 
Add 
Tools 
  jdk线程池 
  
一、引言 
第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。 
  </div>
                                </li>
                                <li><a href="/article/1901.htm"
                                       title="关于hql中使用本地sql函数的问题(问-答)" target="_blank">关于hql中使用本地sql函数的问题(问-答)</a>
                                    <span class="text-muted">BreakingBad</span>
<a class="tag" taget="_blank" href="/search/HQL/1.htm">HQL</a><a class="tag" taget="_blank" href="/search/%E5%AD%98%E5%82%A8%E5%87%BD%E6%95%B0/1.htm">存储函数</a>
                                    <div>转自于:http://www.iteye.com/problems/23775 
问: 
我在开发过程中,使用hql进行查询(mysql5)使用到了mysql自带的函数find_in_set()这个函数作为匹配字符串的来讲效率非常好,但是我直接把它写在hql语句里面(from ForumMemberInfo fm,ForumArea fa where find_in_set(fm.userId,f</div>
                                </li>
                                <li><a href="/article/2028.htm"
                                       title="读《研磨设计模式》-代码笔记-迭代器模式-Iterator" target="_blank">读《研磨设计模式》-代码笔记-迭代器模式-Iterator</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a>
                                    <div>声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/ 
 



import java.util.Arrays;
import java.util.List;

/**
 * Iterator模式提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象内部表示
 * 
 * 个人觉得,为了不暴露该</div>
                                </li>
                                <li><a href="/article/2155.htm"
                                       title="常用SQL" target="_blank">常用SQL</a>
                                    <span class="text-muted">chenjunt3</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a>
                                    <div>  
  
--NC建库
CREATE TABLESPACE NNC_DATA01 DATAFILE 'E:\oracle\product\10.2.0\oradata\orcl\nnc_data01.dbf' SIZE 500M AUTOEXTEND ON NEXT 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K ;
CREATE TABLESPA</div>
                                </li>
                                <li><a href="/article/2282.htm"
                                       title="数学是科学技术的语言" target="_blank">数学是科学技术的语言</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E6%B4%BB%E5%8A%A8/1.htm">活动</a><a class="tag" taget="_blank" href="/search/%E9%A2%86%E5%9F%9F%E6%A8%A1%E5%9E%8B/1.htm">领域模型</a>
                                    <div>  从小学到大学都在学习数学,从小学开始了解数字的概念和背诵九九表到大学学习复变函数和离散数学,看起来好像掌握了这些数学知识,但是在工作中却很少真正用到这些知识,为什么? 
 
   最近在研究一种开源软件-CARROT2的源代码的时候,又一次感觉到数学在计算机技术中的不可动摇的基础作用,CARROT2是一种用于自动语言分类(聚类)的工具性软件,用JAVA语言编写,它</div>
                                </li>
                                <li><a href="/article/2409.htm"
                                       title="Linux系统手动安装rzsz 软件包" target="_blank">Linux系统手动安装rzsz 软件包</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/sz/1.htm">sz</a><a class="tag" taget="_blank" href="/search/rz/1.htm">rz</a>
                                    <div>1、下载软件 rzsz-3.34.tar.gz。登录linux,用命令 
 
wget http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz下载。 
 
2、解压 tar zxvf  rzsz-3.34.tar.gz 
 
3、安装  cd rzsz-3.34 ; make posix 。注意:这个软件安装与常规的GNU软件不</div>
                                </li>
                                <li><a href="/article/2536.htm"
                                       title="读源码之:ArrayBlockingQueue" target="_blank">读源码之:ArrayBlockingQueue</a>
                                    <span class="text-muted">dieslrae</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>    ArrayBlockingQueue是concurrent包提供的一个线程安全的队列,由一个数组来保存队列元素.通过 
takeIndex和 
putIndex来分别记录出队列和入队列的下标,以保证在出队列时 
不进行元素移动. 
 
 

//在出队列或者入队列的时候对takeIndex或者putIndex进行累加,如果已经到了数组末尾就又从0开始,保证数</div>
                                </li>
                                <li><a href="/article/2663.htm"
                                       title="C语言学习九枚举的定义和应用" target="_blank">C语言学习九枚举的定义和应用</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/c/1.htm">c</a>
                                    <div>枚举的定义 
# include <stdio.h>

enum WeekDay
{
	MonDay, TuesDay, WednesDay, ThursDay, FriDay, SaturDay, SunDay	
};

int main(void)
{	
	//int day;	//day定义成int类型不合适
	enum WeekDay day = Wedne</div>
                                </li>
                                <li><a href="/article/2790.htm"
                                       title="Vagrant 三种网络配置详解" target="_blank">Vagrant 三种网络配置详解</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/vagrant/1.htm">vagrant</a>
                                    <div> 
 Forwarded port 
 Private network 
 Public network 
 
Vagrant 中一共有三种网络配置,下面我们将会详解三种网络配置各自优缺点。 
端口映射(Forwarded port),顾名思义是指把宿主计算机的端口映射到虚拟机的某一个端口上,访问宿主计算机端口时,请求实际是被转发到虚拟机上指定端口的。Vagrantfile中设定语法为:   
c</div>
                                </li>
                                <li><a href="/article/2917.htm"
                                       title="16.性能优化-完结" target="_blank">16.性能优化-完结</a>
                                    <span class="text-muted">frank1234</span>
<a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a>
                                    <div>性能调优是一个宏大的工程,需要从宏观架构(比如拆分,冗余,读写分离,集群,缓存等), 软件设计(比如多线程并行化,选择合适的数据结构), 数据库设计层面(合理的表设计,汇总表,索引,分区,拆分,冗余等) 以及微观(软件的配置,SQL语句的编写,操作系统配置等)根据软件的应用场景做综合的考虑和权衡,并经验实际测试验证才能达到最优。 
 
性能水很深, 笔者经验尚浅 ,赶脚也就了解了点皮毛而已,我觉得</div>
                                </li>
                                <li><a href="/article/3044.htm"
                                       title="Word Search" target="_blank">Word Search</a>
                                    <span class="text-muted">hcx2013</span>
<a class="tag" taget="_blank" href="/search/search/1.htm">search</a>
                                    <div>Given a 2D board and a word, find if the word exists in the grid. 
The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or ve</div>
                                </li>
                                <li><a href="/article/3171.htm"
                                       title="Spring4新特性——Web开发的增强" target="_blank">Spring4新特性——Web开发的增强</a>
                                    <span class="text-muted">jinnianshilongnian</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/spring+mvc/1.htm">spring mvc</a><a class="tag" taget="_blank" href="/search/spring4/1.htm">spring4</a>
                                    <div>Spring4新特性——泛型限定式依赖注入 
Spring4新特性——核心容器的其他改进 
Spring4新特性——Web开发的增强 
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC  
Spring4新特性——Groovy Bean定义DSL 
Spring4新特性——更好的Java泛型操作API  
Spring4新</div>
                                </li>
                                <li><a href="/article/3298.htm"
                                       title="CentOS安装配置tengine并设置开机启动" target="_blank">CentOS安装配置tengine并设置开机启动</a>
                                    <span class="text-muted">liuxingguome</span>
<a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a>
                                    <div>yum install gcc-c++  
yum install pcre pcre-devel  
yum install zlib zlib-devel  
yum install openssl openssl-devel 
 
Ubuntu上可以这样安装 
sudo aptitude install libdmalloc-dev libcurl4-opens</div>
                                </li>
                                <li><a href="/article/3425.htm"
                                       title="第14章 工具函数(上)" target="_blank">第14章 工具函数(上)</a>
                                    <span class="text-muted">onestopweb</span>
<a class="tag" taget="_blank" href="/search/%E5%87%BD%E6%95%B0/1.htm">函数</a>
                                    <div>index.html 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/</div>
                                </li>
                                <li><a href="/article/3552.htm"
                                       title="Xelsius 2008 and SAP BW at a glance" target="_blank">Xelsius 2008 and SAP BW at a glance</a>
                                    <span class="text-muted">blueoxygen</span>
<a class="tag" taget="_blank" href="/search/BO/1.htm">BO</a><a class="tag" taget="_blank" href="/search/Xelsius/1.htm">Xelsius</a>
                                    <div>Xelsius提供了丰富多样的数据连接方式,其中为SAP BW专属提供的是BICS。那么Xelsius的各种连接的优缺点比较以及Xelsius是如何直接连接到BEx Query的呢? 以下Wiki文章应该提供了全面的概览。 
  
http://wiki.sdn.sap.com/wiki/display/BOBJ/Xcelsius+2008+and+SAP+NetWeaver+BW+Co</div>
                                </li>
                                <li><a href="/article/3679.htm"
                                       title="oracle表空间相关" target="_blank">oracle表空间相关</a>
                                    <span class="text-muted">tongsh6</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
                                    <div>在oracle数据库中,一个用户对应一个表空间,当表空间不足时,可以采用增加表空间的数据文件容量,也可以增加数据文件,方法有如下几种: 
 
1.给表空间增加数据文件 
   ALTER TABLESPACE "表空间的名字" ADD DATAFILE 
   '表空间的数据文件路径' SIZE 50M; 
  &nb</div>
                                </li>
                                <li><a href="/article/3806.htm"
                                       title=".Net framework4.0安装失败" target="_blank">.Net framework4.0安装失败</a>
                                    <span class="text-muted">yangjuanjava</span>
<a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a>
                                    <div>上午的.net framework 4.0,各种失败,查了好多答案,各种不靠谱,最后终于找到答案了 
和Windows Update有关系,给目录名重命名一下再次安装,即安装成功了! 
下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=17113 
方法: 
1.运行cmd,输入net stop WuAuServ 
2.点击开</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>