我有一个通用的例程,用于将短代码(以“^”字符开头)替换为特定于性别的选项。我被要求扩展这个以纠正一些常见的拼写错误。这些词在开始时不会有特殊的字符。如何匹配包含特殊字符的正则表达式模式?
到目前为止,我一直在使用PHP的str_replace
函数,但由于某些单词出现在其他单词中的可能性,我需要确保代码在匹配时使用单词边界。我现在试图使用preg_replace
。
虽然实际的代码是从数据库表中获取数据,包括性别特定的替换,但我可以用更简单的代码重现问题以便提出此问题。
考虑具有$search => $replace
结构下面的数组:
$subs = array("^Heshe" => "He",
"apples" => "bananas");
我然后通过阵列要循环到替换标记:
$message = "^Heshe likes apples but not crabapples.";
foreach ($subs as $search => $replace)
{
$pattern = '/\b' . preg_quote($search, '/') . '\b/u';
$message = preg_replace($pattern, $replace, $message);
}
echo $message;
我期望该消息将被显示He likes bananas but not crabapples.
,而是我收到消息^Heshe likes bananas but not crabapples.
我也试过$pattern = '/\b\Q' . $search . '\E\b/u'
,还带有t他同样的结果。
不幸的是,“^”字符是一些遗留系统的一部分,改变它是不可行的。我如何获得正则表达式?
谢谢!您的第一个选项似乎按预期工作。然而,你的第二个并不能取代这个字符串中的最后一个“苹果”:'$ message =“^ Heshe喜欢苹果,但不喜欢海棠,他喜欢苹果。 – Philip
是的。我的首选也是第一个**负面预测**正则表达式。 – anubhava