懒惰?在正则表达式

时间:2015-01-03 05:48:16

标签: regex

有人可以说明下列正则表达式之间有什么区别吗?

/b\w+?/g

/b\w/g

基于regexr for Lazy?的文档:使前面的量词变得懒惰,使其匹配尽可能少的字符。默认情况下,量词是贪婪的,并且将匹配尽可能多的字符。

1 个答案:

答案 0 :(得分:1)

两个正则表达式都匹配相同的东西(一个“字母数字”字符)。只有当正则表达式变得更复杂时,它们之间的区别才会变得明显。

例如,

\b\w\.

将匹配"A."但不匹配"Mr.",因为\w只匹配一个字符。

\b\w+?\.

将匹配两者。这与懒惰没有关系,但在第一个正则表达式中缺乏量词。但如果你比较

\b\w+\d

\b\w+?\d

你会发现一个重要的区别:两个正则表达式都会以不同的方式匹配字符串"R2D2" - 第一个匹配"R2D2",第二个匹配"R2",因为? }告诉\w+令牌匹配尽可能少的字符,因此它会在R之后停止匹配(即使可以匹配更多。只有在匹配时才会匹配更多正则表达式不会匹配否则)。