2011-11-15 35 views
1

我已经使用正则表达式的年龄,但不知怎的,我设法永远不会遇到这样的事情。正则表达式替换匹配的子表达式(而不是其他)?

我正在寻找一个文件中的一些批量搜索/替换操作,我需要替换标签类元素中的一些数据。例如,将<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); 

但实际上所有我想要做的是模拟一个“替换文本标签T与X之间“。

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

编辑:数据不是XML,尽管它看起来像标签一样。我知道比用RegEx解析HTML和XML更好。 ;)

+0

更多信息 - 是文档某种标记?任何标签或只是特定的?标签或特定模式中的任何内容? – meouw

回答

2

它使用lookarounds是可能的:

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

看到它联机工作:需要ideone