php - 将确切的单词与任何字符正则表达式匹配

标签 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

我想匹配包含任何字符的确切单词。就像我想匹配这个字符串中的单词“download”,它应该返回 false

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

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

谢谢

最佳答案

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

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

\B#worldemojiday\b

或者

#worldemojiday\b

参见 demo (或 this one)

请注意 \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/

相关文章:

php - Indesign Server soap 响应

PHP/Actionscript 3 带有进度指示器的多个文件上传

regex - 正则表达式之间的距离

javascript - 如何排除字母?

javascript - 如何为 while 循环构建正则表达式?

php - PayPal 和 PHP - 设置无运费

php - Eloquent 类位于 Laravel 4.2 中的哪里?

php 中的 javascript - 失败

python - 正则表达式中的灾难性回溯

regex - 将两个正则表达式 A 和 B 组合成 C = (A and not B)