1

在以下用例中寻找基于正则表达式的 Java 字符串替换。我正在做一些基于 Groovy 的 XML 处理,并且由于一些自定义处理(不会对此进行详细说明),生成的 XML 有一些无效标签,例如

<?xml version='1.0' encoding='UTF-8'?>
<Customer id="xyz" xmlns='http://abc.com'>
<order orderGroup="mock">
    <entry>
        <key>test</key>
    </entry>
</order orderGroup="mock">
</Customer id="xyz">

如果您注意到,包含属性的元素名称的结束标签是混乱的。XML 只是被视为一个字符串,所以我想要做的是,只需通过基于字符串正则表达式的替换来替换此类结束标记的出现。例如替换

</order orderGroup="mock"> with </order>, 
</Customer id="xyz"> with </Customer>

知道是否可以使用基于 Java 字符串的快速正则表达式来进行此类替换吗?

谢谢。

4

2 回答 2

5

尝试

    xml = xml.replaceAll("</([^ >]+).*?>", "</$1>");
于 2013-03-23T00:15:47.317 回答
2

最简单的解决方案是修复您的自定义 XML 处理并让它生成有效的XML。

简单的解决方案是使用JTidy之类的东西来清理您的 XML。

如果你必须使用正则表达式,你可以尝试这样的事情:

Pattern pattern = Pattern.compile("</([A-Za-z]+) [^>]+>");
Matcher matcher = pattern.matcher(xml);

if(matcher.find()) {
   xml = matcher.replaceAll(matcher.group(1));
}

我还没有测试过,所以请记住这一点。可能有几个问题。

正则表达式的解释:

<         -> The opening angle bracket of the tag
/         -> The / that marks a closing tag
(         -> Start of a capturing group. We want to capture the actual ending tag.
[A-Za-z]+ -> One or more alphabetic characters (upper and lowercase)
)         -> End of the capturing group.
          -> A space.
[^>]+     -> One or more of anything that is not a closing angle-bracket.
>         -> The closing angle bracket of the tag.
于 2013-03-22T23:54:56.680 回答