2014-06-05 95 views

回答

4

這兩種模式的含義不同。特別是,第一個將不匹配blah foobar,但第二個將會。

斷言消耗的零寬度正向超前斷言((?= …))的內容是而不是。斷言之後的任何文本在檢查斷言之前的正則表達式所搜索的同一點處開始匹配。

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

+1

唉,沮喪,一個人去了我的頭。 +1 – Sam

1

區別在於檢查單詞邊界的位置:第一個單詞邊界必須在.*foo之後,但第二個必須在.*foo之前。看到這兩個例子:

  1. (?=.*foo\b)
  2. (?=.*foo)\b
相關問題