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