将精确单词与任何字符正则表达式匹配

6 php regex

如何匹配确切的单词包含任何特殊字符?

$string = 'Fall in love with #PepsiMoji! Celebrate #WorldEmojiDay by downloading our keyboard @ http://bit.ly/pepsiKB & take your text game up a notch. - teacher';

preg_match("/\b#worldemojiday\b/i",$string); //false
Run Code Online (Sandbox Code Playgroud)

我想匹配包含任何字符的确切单词.就像我想在这个字符串中匹配单词'download'一样,它应该返回false

preg_match("/\bdownload\b/i",$string); //false
Run Code Online (Sandbox Code Playgroud)

但是当我搜索下载时,它应该返回true.

谢谢

Wik*_*żew 3

问题在于非单词字符\\b之前的单词边界。无法匹配 2 个非单词(或 2 个单词)字符之间的位置,因此,您不会获得匹配项。#\\b

\n\n

解决方案是删除第一个\\b,或使用\\B(2 个单词或 2 个非单词字符之间的非单词边界匹配)代替它。

\n\n
\\B#worldemojiday\\b\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者

\n\n
#worldemojiday\\b\n
Run Code Online (Sandbox Code Playgroud)\n\n

请参阅演示(或这个

\n\n

请注意,\\B也匹配字符串的开头。

\n\n

这是动态构建正则表达式的方法,仅在必要时添加单词边界:

\n\n
$srch = "\xc5\xbevolen";\n$srch = preg_quote($srch);\nif (preg_match(\'/\\w$/u\', $srch)) {\n    $srch .= \'\\\\b\';   \n}\n\nif (preg_match(\'/^\\w/u\', $srch)) {\n    $srch = \'\\\\b\' . $srch;\n}\necho preg_match("/" . $srch . "/ui", "\xc5\xbevolen is used.");\n
Run Code Online (Sandbox Code Playgroud)\n