バドワードのリストがあります。そのうちの1つは「SA」です。すべての単語が配列に保存され、配列をループして置換します。SAという単語は、私が置き換えたくないものを置き換えます。単語自体としてSAを置き換えるためだけに必要です。したがって、「このSAは悪かった」という例です。「これは悪かった」になるはずです。しかし、(たとえば)SEASを含む文字列で実行すると、置き換えられます...理由はわかりません...
ps:if thenチェックは、文字列$ vが正確に悪語である場合、削除すべきではないためです。正規表現の\b単語インジケーターは、単語を完全に一致させるべきではありませんか?
ps:単語の一部ではなく、完全な単語のみを削除したい。私がAppleをバッドリストに入れているが、誰かがAppleを書いた場合、それを置き換えるべきではありません。
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);
}
}
私の正規表現パターンの何が問題になっていますか?!?!