2014-06-05 56 views

回答

4

这两种模式的含义不同。特别是,第一个将不匹配blah foobar,但第二个将会。

断言消耗的零宽度正向超前断言((?= …))的内容是而不是。断言之后的任何文本在检查断言之前的正则表达式所搜索的同一点处开始匹配。

因此,正则表达式(?=.*foo\b)其中串foo正好出现在字边界之前的任何字符串匹配,但(?=.*foo)\b含有foo和在字边界开始的字符串相匹配。其次,这是一件非常奇怪的事情,而且不太可能是你想要的。

+1

唉,沮丧,一个人去了我的头。 +1 – Sam

1

区别在于检查单词边界的位置:第一个单词边界必须在.*foo之后,但第二个必须在.*foo之前。看到这两个例子:

  1. (?=.*foo\b)
  2. (?=.*foo)\b
相关问题