我试图扫描一个字符串来检查黑名单中的单词。我使用preg_quote
来处理特殊字符,例如星号,但它似乎不适用于美元符号。PHP preg_match和preg_quote不匹配美元符号
下面是测试我一直在运行:
$string_to_check = 'wordcontaining$';
$naughty_words = array('wordcontaining$', 'a*differentstring');
if(isset($naughty_words)){
foreach($naughty_words as $word){
if (preg_match('/\b'.preg_quote($word).'\b/i',$string_to_check)) {
var_export(array('found'=> true, 'word'=>$word));
}
}
}
,我会希望返回
array (
'found' => true,
'word' => 'wordcontaining$',
)
但不幸的是事实并非如此。如果我设置了$string_to_check = 'a*differentstring'
,那么一切都按预期工作。
我在这里错过了非常明显的东西吗?
什么'\ b'在你的正则表达式中做什么? – Rikesh 2013-05-07 16:12:25
如果我没有记错(自从我编码以来已经有一段时间了),它只会查找完整的单词,即如果列入黑名单的单词出现在较长单词的中间,则不匹配。 – Josh 2013-05-07 16:15:14
\ b是一个零宽度的字边界(我相信它相当于'($ | \ W | ^)')。你能否尝试导出preg_quote的结果来查看它是否正确摆脱了美元符号? – Adrian 2013-05-07 16:17:44