Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 对于正则表达式中的单词边界(\b),我需要在单词之前和之后,还是在单词之前?_Php_Regex - Fatal编程技术网

Php 对于正则表达式中的单词边界(\b),我需要在单词之前和之后,还是在单词之前?

Php 对于正则表达式中的单词边界(\b),我需要在单词之前和之后,还是在单词之前?,php,regex,Php,Regex,如果我想匹配所有出现的单词foo,我会使用\bfoo\b还是不使用最后一个?这两种方法似乎都有效,但什么才合适呢?您需要同时使用这两种方法。如果没有最后一个\b,您将获得以下字符串的匹配: "I love football" "You foolishly left off your second word boundary" foo123 3foo foo_bar fun_foo 考虑到以下输入: foo foobar 此正则表达式将仅匹配第一个foo: \bfoo\b 此正则表达式将匹配

如果我想匹配所有出现的单词
foo
,我会使用
\bfoo\b
还是不使用最后一个?这两种方法似乎都有效,但什么才合适呢?

您需要同时使用这两种方法。如果没有最后一个
\b
,您将获得以下字符串的匹配:

"I love football"
"You foolishly left off your second word boundary"
foo123 3foo foo_bar fun_foo
考虑到以下输入:

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

\bfoo\b
此正则表达式将匹配
foobar
中的第一个和
foo

\bfoo

但是,请注意,单词边界
\b
的定义基于
\w
的定义:单词边界是在非单词字符和单词字符之间定义的,其中单词字符由
\w
定义\w相当于
[A-Za-z0-9\]
,因此
\bfoo\b
拒绝以下情况:

"I love football"
"You foolishly left off your second word boundary"
foo123 3foo foo_bar fun_foo 食品123 3foo 富吧 芬福

由于数字和<代码> <>代码>考虑字字符,如果它们紧邻代码> fo,则不会形成单词边界,因此<代码> \bfo\b>代码>将不匹配上述任何内容。