Regex 如何使用正则表达式或其他方式更改xml或任何其他文件中的链接?

Regex 如何使用正则表达式或其他方式更改xml或任何其他文件中的链接?,regex,shell,replace,find,Regex,Shell,Replace,Find,我有一个包含很多xml节点的文件,它们通过id链接在一起。我需要更改节点的id以及链接 <event id="12345"> <action>6789</action> </event> <action id="6789"> <name>pre-filter1</name> <someotherlink>45678</someotherlink> &l

我有一个包含很多xml节点的文件,它们通过id链接在一起。我需要更改节点的id以及链接

 <event id="12345">
     <action>6789</action>
 </event>
 <action id="6789">
     <name>pre-filter1</name>
     <someotherlink>45678</someotherlink>
 </action>

6789
预滤器1
45678
我需要更改动作节点的id和链接到的任何位置的引用。我之所以研究regex,是因为我必须只对某些特定名称的操作节点(如这里的pre-filter)进行研究。在替换为新值之前,需要通过一些逻辑处理id。节点的顺序是随机的。 我只需要为整个文件做一次,任何方式都可以。此外,时间复杂性不是一个约束条件


非常感谢您的帮助。

Perl支持使用函数替换正则表达式。对其他语言不太清楚

如果不使用perl,可以执行以下操作:

1) 使用此regexp获取给定名称的所有操作ID:

<action\s*id="(\d+)">(?=[^=]*<name>pre-filter\d<\/name>).*?<\/action> 

2) 转换值并将原始id和转换后的值存储在哈希中

3) 循环散列并使用regexp将id替换为新值

这与操作和操作id都匹配:

(<action(?:\s*id="|>))(THE_ID)("|<\/action)> ==> replace with \1NEW_ID\3
(替换为\1新的\u ID\3

无论如何,用正则表达式解析XML通常不是一个好主意,因此最好使用一些库来解析XML。

但是我需要用从解析值计算的值来替换这两个ID。因此简单正则表达式不是enough@AntarikshaYelkawar,好的,我编辑了我的答案。基本上你要么使用支持r上函数的语言egular表达式替换,或执行几个步骤