2012-12-07 51 views
1

我有一個badwords列表其中有一個是「S.A.」 我的所有單詞都保存在一個數組中,我循環遍歷數組並進行替換。 S.A.這個詞取代了我不想替換的東西,我只需要它就可以替代S.A.作爲一個詞本身。 所以舉例「這個S.A.很糟糕。」應該變成「這很糟糕」。 但現在當我運行它在一個字符串(例如)SEAS中,它將取代它...不知道爲什麼...PHP:正則表達式替換奇怪的結果

ps:如果然後檢查是因爲如果字符串$ v是正是壞字,它不應該被刪除。 正則表達式中的\ b單詞指示符不應該使單詞完全匹配嗎?

ps:我只想刪除完整的單詞,而不是一個單詞的一部分。 如果我有蘋果在壞名單,但有人寫蘋果,它不應該被取代。

foreach ($this->badwordArr as $badword) { 
    if (strtoupper($v) == strtoupper($badword)) { 

     // no replace because its the only word 
     $data[$key] = $v; 

    } else { 

     $pattern = "/\b$badword\b/i"; 
     $v = preg_replace($pattern, " ", $v); 
    }  
} 

我的正則表達式模式有什麼問題?!?!

回答

5

點是一個正則表達式中的元字符,代表任何字符。你需要逃避它:

S\.A\. 

爲了避免修改你的整個列表,你可以使用:

$badword_escaped = preg_quote($badword); 
$pattern = "/\b$badword_escaped\b/i"; 
+0

我認爲這將是這樣的。感謝您提供快速解決方案。 – renevdkooi