我想用 xyz 替换标记的 XML 文件中的所有名称。换句话说,替换标签之间的所有内容(包括空格)。我究竟做错了什么?
Search: (<name>)(.*)(</name>)
Replace: \1xyz\3
您正在尝试使用正则表达式解析 XML。
但是,无论如何,您做错的是使用贪婪的重复。这将从第一个<name>
到最后一个</name>
(即使它们不属于一起)一直进行,因为.*
它将尝试在满足匹配条件的同时尽可能多地消耗.. 改用这个:
Search: (<name>).*?(</name>)
Replace: \1xyz\2
或者为了安全起见,您也可以转义<
and >
,因为它们在某些特定情况下是元字符(虽然不是在这个情况下):
Search: (\<name\>).*?(\</name\>)
Replace: \1xyz\2
在这两种情况下,这都会导致.*
不贪婪,即它会尽可能少地消耗。
并确保升级到 Notepad++ 6,因为在此之前 Notepad++ 的正则表达式引擎存在一些问题。
最后,正如 hoombar 在评论中指出的那样,.
默认情况下匹配除换行符之外的每个字符。在 Notepadd++ 中,您可以通过勾选复选框来更改此行为. matches newline
。