2010-08-31 23 views
0

我在preg_replace中使用'e'修饰符来搜索给定的字符串。然后,我需要它该字符串使用其他的preg_replace声明个人比赛中看看:在转义令牌时嵌套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评估的第二行代码,它的更换两个$ 1个令牌与匹配的字符串foo。我需要它忽略第一个$ 1标记,因为它应该由内部preg_replace语句进行评估。我如何逃避第一个$ 1令牌,以便它不会被外部preg_replace语句评估?

回答

1

你可以用一些欺骗解析器像

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

但是,说实话,这看起来完全丑陋。你可能想告诉我们更多关于这个问题,我相信有更好的方法。

+0

是的,这很好。只要加上''。'就足以推迟对该令牌的评估。谢谢。为了回答你的问题,我使用它来将文本文件标记为xml。我用标签标识整行,然后用标签标识其中的元素。 – Andrew 2010-08-31 22:02:04