【发布时间】:2014-10-17 03:25:29
【问题描述】:
我有一个文件,通常是 XML 文件。我想用“p.q”替换所有出现的“x.y”。但是在这个替换过程中,我想忽略 cmets() 中 x.y 的出现。
我试图使用 String.replaceAll() 来执行这个任务。
例如:
<?xml version="1.0" encoding="UTF-8"?>
<name>This occurrence of x.y should be replaced</name>
<!-- This occurrence of x.y should not be replaced -->
我尝试使用 String.replaceAll("x[\.]y", "p.q") 但我可以看到 cmets 中的出现也被替换了
我可以使用其他替代方法,通过它我可以逐行读取文件并排除以 cmets 开头的行,但我有兴趣使用 replaceAll()
请提供一种实现方式。
【问题讨论】:
-
Obligatory link。不要使用正则表达式,使用 JAXP 提供的众多 XML 解析器之一。
-
不要使用正则表达式解析 XML。在这种情况下,最简单的方法是使用 XML 解析器。
-
我个人一直更喜欢简单/标准的 JDOM,但我完全同意 Boris。对 XML 使用正则表达式是灾难的根源。
-
这个问题相当于只用锤子问如何拆螺丝。就算有办法,也比用螺丝刀更难、更复杂、更危险。
-
@Patricia 喜欢这个类比 - +1。