如何匹配确切的单词包含任何特殊字符?
$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.
谢谢
问题在于非单词字符\\b之前的单词边界。无法匹配 2 个非单词(或 2 个单词)字符之间的位置,因此,您不会获得匹配项。#\\b
解决方案是删除第一个\\b,或使用\\B(2 个单词或 2 个非单词字符之间的非单词边界匹配)代替它。
\\B#worldemojiday\\b\nRun Code Online (Sandbox Code Playgroud)\n\n或者
\n\n#worldemojiday\\b\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n请注意,\\B也匹配字符串的开头。
这是动态构建正则表达式的方法,仅在必要时添加单词边界:
\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.");\nRun Code Online (Sandbox Code Playgroud)\n