我試圖掃描一個字符串來檢查黑名單中的單詞。我使用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