您可以减去_
并\w
使用明确的单词边界:
/(?<![^\W_])foo(?![^\W_])/i
请参阅此正则表达式演示。注意\bfoo
=(?<!\w)foo
和foo(?!\w)
= foo\b
,_
从\w
(等于[^\W]
)减去 a 得到[^\W_]
。
在 PHP 中,您可以使用preg_match_all
来查找所有匹配项:
preg_match_all("/(?<![^\W_])foo(?![^\W_])/i", $sentence)
要替换/删除所有匹配项,您可以使用preg_replace
:
preg_replace("/(?<![^\W_])foo(?![^\W_])/i", "YES", $sentence)
在线查看PHP 演示:
$sentence = "foo_foo_foo foo-foo_foo";
if (preg_match_all("/(?<![^\W_])foo(?![^\W_])/i", $sentence, $matches)) {
print_r($matches[0]);
}
// => Array( [0] => foo [1] => foo [2] => foo [3] => foo [4] => foo [5] => foo)
echo PHP_EOL . preg_replace("/(?<![^\W_])foo(?![^\W_])/i", "YES", $sentence);
// => YES_YES_YES YES-YES_YES