使用RegEx中的单词边界(\ b),我需要在单词之前和之后,或者之前使用它吗?

时间:2013-02-05 23:13:38

标签: php regex

如果我想匹配单词foo的所有匹配项,我会使用\bfoo\b还是不使用最后一个?它似乎都有效,但是什么是正确的?

3 个答案:

答案 0 :(得分:7)

您需要同时使用两者。如果没有最后一个\b,您将获得字符串匹配,例如:

"I love football"
"You foolishly left off your second word boundary"

答案 1 :(得分:3)

但是,请注意,单词边界\b的定义基于\w的定义:当单词边界位于非单词字符和单词字符之间时,定义单词边界。字符由\w定义。对于ASCII字符串,\w等同于[A-Za-z0-9_],因此\bfoo\b拒绝例如:

foo123
3foo
foo_bar
fun_foo

由于数字和_被认为是单词字符,如果它们位于foo旁边,则它不会形成单词边界,因此\bfoo\b将不符合上述任何一个

答案 2 :(得分:2)

给出以下输入:

foo foobar

此正则表达式仅匹配第一个foo

\bfoo\b

此正则表达式将匹配第一个以及foo中的foobar

\bfoo