这两种模式之间有什么区别:
(?=.*foo\b)
(?=.*foo)\b
这是性能差异吗?
答案 0 :(得分:4)
这两种模式意味着不同的东西。特别是,第一个不匹配blah foobar
,但第二个将匹配。
断言消耗的零宽度前瞻性断言((?= … )
)的内容不。断言后的任何文本都会在检查断言之前在正则表达式搜索的同一点开始匹配。
因此,正则表达式(?=.*foo\b)
匹配字符串foo
出现在字边界之前的任何字符串,但(?=.*foo)\b
匹配包含foo
的任何字符串并开始在一个词边界。其中第二个是非常奇怪的事情,并且不太可能是你想要的。
答案 1 :(得分:1)
区别在于检查单词边界的位置:在第一个单词中,单词边界必须在.*foo
之后,但在第二个中,它必须在.*foo
之前。请参阅以下两个示例: