如何匹配确切的单词包含任何特殊字符?
$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
我想匹配包含任何字符的确切字词。就像我想在这个字符串中匹配单词'download'一样,它应该返回false
preg_match("/\bdownload\b/i",$string); //false
但是当我搜索下载时,它应该返回true。
由于
答案 0 :(得分:3)
问题在于\b
非单词字符之前的#
字边界。 \b
无法匹配2个非单词(或2个单词)字符之间的位置,因此,您无法获得匹配。
解决方案是删除第一个\b
,或使用\B
(2个字或2个非字字符之间的非字边界匹配)代替它。
\B#worldemojiday\b
或者
#worldemojiday\b
请注意,\B
也匹配字符串的开头。
以下是a way动态构建正则表达式,仅在必要时添加单词边界:
$srch = "žvolen";
$srch = preg_quote($srch);
if (preg_match('/\w$/u', $srch)) {
$srch .= '\\b';
}
if (preg_match('/^\w/u', $srch)) {
$srch = '\\b' . $srch;
}
echo preg_match("/" . $srch . "/ui", "žvolen is used.");
答案 1 :(得分:1)