Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.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正则表达式单词边界排除下划线__Php_Regex_Localization_Preg Match_Word Boundary - Fatal编程技术网

PHP正则表达式单词边界排除下划线_

PHP正则表达式单词边界排除下划线_,php,regex,localization,preg-match,word-boundary,Php,Regex,Localization,Preg Match,Word Boundary,我正在使用regex word boundary\b,我试图在下面的$sential中匹配foo,但结果不是我所需要的,下划线正在折磨我,我希望下划线成为单词边界,就像连字符或空格一样: $sentence = "foo_foo_foo foo-foo_foo"; X X X YES X X 预期: $sentence = "foo_foo_foo foo-foo_foo"; YES YES YES YES YES YES

我正在使用regex word boundary\b,我试图在下面的
$sential
中匹配
foo
,但结果不是我所需要的,
下划线
正在折磨我,我希望下划线成为单词边界,就像连字符或空格一样:

$sentence = "foo_foo_foo foo-foo_foo";
              X   X   X  YES  X   X
预期:

$sentence = "foo_foo_foo foo-foo_foo";
             YES YES YES YES YES YES
我的代码:

preg_match("/\bfoo\b/i", $sentence);

这是你想要的吗

preg_match_all("/foo/i", $sentence, $matches);
var_dump($matches);
您必须创建边界

(?:\b|_\K)foo(?=\b|_)

您可以从
\w
中减去
\u
,并使用明确的单词边界:

/(?
请参阅。注意
\bfoo
=
(?和
foo(?!\w)
=
foo\b
,然后从
\w
中减去
\uu
(等于
[^\w]
)将导致
[^\w\/code>

在PHP中,您可以使用
preg\u match\u all
查找所有匹配项:


preg\u match\u all(“/”(?你试过在线搜索吗?我在谷歌上找不到这个特定的问题。你可以在这里使用
preg\u split
而不是
preg\u match
?@Sunny网上有关于这个的文章,相关问题部分有许多与他的相关的不同问题。@sectus它必须是preg\u match:(不,因为它也将匹配foobar,我只需要完整的单词