在以下用例中寻找基于正则表达式的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只是被视为一个字符串,所以我想做的是,只需通过基于字符串regex的替换来替换此类结束标记的出现。对于例如替换
</order orderGroup="mock"> with </order>,
</Customer id="xyz"> with </Customer>
任何想法是否有快速的基于Java String的正则表达式我可以用来做这样的替换?
感谢。
答案 0 :(得分:5)
试
xml = xml.replaceAll("</([^ >]+).*?>", "</$1>");
答案 1 :(得分: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.