在转义令牌时嵌套preg_replace函数

时间:2010-08-31 21:38:02

标签: php regex

我在preg_replace中使用'e'修饰符来搜索给定的字符串。然后我需要它使用另一个preg_replace语句在该字符串中查找单个匹配:

$str = "This is FOO.";
$str = preg_replace('/(foo)/ie', "x$1", $str);
echo $str;

这将生成:This is xFOO.
现在我需要窝。 (我正在嵌套,因为我需要将未知数量的组匹配到单独的标记中,这在本论坛其他地方讨论过的单个preg_replace语句是不可能的。我显然简化了这段代码以专注于我的问题。)

$str = "This is FOO.";
$str = preg_replace('/(foo)/ie', "preg_replace('/(\w)/i','x$1','$1')", $str);
echo $str;

我需要这个来生成This is xFxOxO.
但相反,它会生成This is xFOOxFOOxFOO.

当php评估第二行代码时,它会用匹配的字符串foo替换$ 1令牌。我需要它忽略第一个$ 1标记,因为它应该由内部preg_replace语句评估。如何转义第一个$ 1令牌,以便外部preg_replace语句不会对其进行评估?

1 个答案:

答案 0 :(得分:1)

你可以使用像

这样的东西欺骗解析器
$str = preg_replace('/(foo)/ie', "preg_replace('/(\w)/i','x$'.'1','$1')", $str);
但是,老实说,它看起来很丑陋。你可能想告诉我们更多关于这个问题的信息,我相信还有更好的方法。