(?=。* foo \ b)和(?=。* foo)\ b之间的差异

时间:2014-06-05 17:10:51

标签: regex

这两种模式之间有什么区别:

  • (?=.*foo\b)

  • (?=.*foo)\b

这是性能差异吗?

2 个答案:

答案 0 :(得分:4)

这两种模式意味着不同的东西。特别是,第一个不匹配blah foobar,但第二个将匹配。

断言消耗的零宽度前瞻性断言((?= … ))的内容。断言后的任何文本都会在检查断言之前在正则表达式搜索的同一点开始匹配。

因此,正则表达式(?=.*foo\b)匹配字符串foo出现在字边界之前的任何字符串,但(?=.*foo)\b匹配包含foo的任何字符串并开始在一个词边界。其中第二个是非常奇怪的事情,并且不太可能是你想要的。

答案 1 :(得分:1)

区别在于检查单词边界的位置:在第一个单词中,单词边界必须在.*foo之后,但在第二个中,它必须在.*foo之前。请参阅以下两个示例:

  1. (?=.*foo\b)
  2. (?=.*foo)\b