如何精确匹配包含特殊字符的单词?
$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。
谢谢
最佳答案
问题出在 #
非单词字符之前的 \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.");
关于php - 将确切的单词与任何字符正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31829612/