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


Match exact word with any character 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

我要匹配包含任何字符的精确单词。例如,如果我想在这个字符串中匹配单词'download',它应该返回false

preg_match("/'bdownload'b/i",$string); //false

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

谢谢

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

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

'B#worldemojiday'b

#worldemojiday'b

参见demo(或这个)

注意'B也匹配字符串的开头。

这是一种动态构建正则表达式的方法,只在必要的地方添加词边界:

$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.");

如何使用遍历:

(?<!'w)#WorldEmojiDay(?!'w)

这确保在字符串之前或之后没有字元。参见regex101

的测试