【问题标题】:Regex replace matched subexpression (and nothing else)?正则表达式替换匹配的子表达式(仅此而已)?
【发布时间】:2011-11-15 22:26:33
【问题描述】:

我已经使用正则表达式很长时间了,但不知何故,我设法从未遇到过这样的事情。

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

但实际上我想做的只是模拟“用 X 替换标签 T 之间的文本”。

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

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

【问题讨论】:

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

标签: php regex


【解决方案1】:

可以使用lookarounds:

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

在线查看:ideone

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-16
    • 2021-10-09
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 2021-04-10
    相关资源
    最近更新 更多