PHP:正则表达式取代奇怪的结果

时间:2012-12-07 01:31:27

标签: php regex

我有一个坏词列表,其中一个是“S.A.” 我的所有单词都保存在一个数组中,然后循环遍历数组并进行替换。 S.A.这个词取代了我不想替换的东西,我只需要将S.A.替换为一个词本身。 例如“这个S.A.很糟糕。”应该成为“这很糟糕”。 但是现在当我在一个带有(例如)SEAS的字符串上运行它时,它会替换它......不知道为什么......

ps:if if then check是因为如果字符串$ v恰好是badword,则不应删除它。 正则表达式中的\ 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);
    }       
}

我的正则表达式模式有什么问题?!?!

1 个答案:

答案 0 :(得分:5)

点是正则表达式中的元字符,表示任何字符。你需要逃脱它:

S\.A\.

为避免修改整个列表,您可以使用:

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