PHP:regex替换奇怪的结果
我有一个坏词列表,其中一个是“S.a.” 我所有的单词都保存在一个数组中,我在数组中循环并进行替换。 S.A.这个词代替了我不想被取代的东西,我只需要它代替S.A.这个词本身。 所以,示例“这个S.A.很糟糕”应该变成“这很糟糕”。 但现在,当我在一个包含(例如)SEAS的字符串上运行它时,它将替换它。。。不知道为什么 ps:if-then检查是因为如果字符串$v正是坏字,则不应删除它。 正则表达式中的\b单词指示符不应该使单词完全匹配吗 ps:我只想删除完整的单词,而不是单词的一部分。 如果我把苹果列在坏名单上,但有人写了苹果,它就不应该被取代PHP:regex替换奇怪的结果,php,regex,Php,Regex,我有一个坏词列表,其中一个是“S.a.” 我所有的单词都保存在一个数组中,我在数组中循环并进行替换。 S.A.这个词代替了我不想被取代的东西,我只需要它代替S.A.这个词本身。 所以,示例“这个S.A.很糟糕”应该变成“这很糟糕”。 但现在,当我在一个包含(例如)SEAS的字符串上运行它时,它将替换它。。。不知道为什么 ps:if-then检查是因为如果字符串$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);
}
}
我的正则表达式有什么问题 点是正则表达式中表示任何字符的元字符。你需要逃避它:
S\.A\.
为避免修改整个列表,您可以使用:
$badword_escaped = preg_quote($badword);
$pattern = "/\b$badword_escaped\b/i";
点是正则表达式中表示任何字符的元字符。你需要逃避它:
S\.A\.
为避免修改整个列表,您可以使用:
$badword_escaped = preg_quote($badword);
$pattern = "/\b$badword_escaped\b/i";
我以为会是这样的。谢谢你的快速解决方案。我以为会是这样的。谢谢你的快速解决方案。