正则表达式替换匹配的子表达式(没有别的)?

时间:2011-11-15 22:26:33

标签: php regex

我已经使用了正则表达式,但不知何故,我设法永远不会遇到这样的事情。

我希望在文件中进行一些批量搜索/替换操作,我需要在类似标签的元素中替换一些数据。例如,将<DelayEvent>13A</DelayEvent>转换为仅<DelayEvent>X</DelayEvent> X,其中$new_data = preg_replace('|<DelayEvent>(\w+)</DelayEvent>|', '<DelayEvent>X</DelayEvent>', $data); 可能各不相同。

我现在这样做是这样的:

$new_data = preg_replace('|(<DelayEvent>)(\w+)(</DelayEvent>)|', '${1}X${2}', $data);

我可以稍微缩短一点:

{{1}}

但我真的想做的就是模拟“用X替换标签T之间的文字”。

有没有办法做这样的事情?本质上,我试图阻止必须匹配所有周围的数据,并在以后重新组装。我只是想用其他东西替换给定的匹配子表达式。

编辑:数据不是XML,虽然它看起来像标签式元素。我比使用RegEx解析HTML和XML更好。 ;)

1 个答案:

答案 0 :(得分:2)

可以使用lookarounds

$new_data = preg_replace('|(?<=<DelayEvent>)\w+(?=</DelayEvent>)|', 'X', $data);

查看在线工作:ideone