Java正则表达式多个标签和属性

时间:2014-06-06 16:00:32

标签: java xml regex tags

这就是我的xml的样子

<xml>
    <tagA value="one"/>
    <tagB value="two"/>
    <tagA value="three"/>
    <tagC value="null"/>
</xml>

只有才能通过这个简化的API层访问String.split(regex) 我必须使用(无模式)。 我最接近解析所有标签:

String xmlContent = "<xml><tagA value=\"one\"/><tagB value=\"two\"/><tagA value=\"three\"/><tagC value=\"null\"/></xml>";
String[] splitedTexts = xmlContent.split("(?=<)(?<=>)");
for (String string : splitedTexts) {            
    System.out.println(string);
}

结果将是:

<xml>
<tagA value="one"/>
<tagB value="two"/>
<tagA value="three"/>
<tagC value="null"/>
</xml>

我只对tagA和tagB (tagA|tagB)感兴趣,但是当我尝试添加它时,我最终弄乱了正则表达式。使用JavaScript语法,它可以使用此正则表达式<(tagA|tagB) value([\S]*)\b(\s*?=\s*?")\S*\B。 没有得到与Java一起工作。预期的产出将是:

<tagA value="one"/>
<tagB value="two"/>
<tagA value="three"/>

下一步是将对中的值放入地图

{"tagA", "one"}
{"tagB", "two"}
{"tagA", "three"}

2 个答案:

答案 0 :(得分:1)

如何使用此表达式而不是拆分:

<强> Online Demo

/(?<=<)(\w+)\b(?!>)|(?<=value=")(\w+)/g

答案 1 :(得分:0)

恭喜:您发现正则表达式无法用于解析XML。如果你阅读一些计算机科学理论,你会发现这是因为XML不是一种常规语言(它的语法 - 就像其他分层格式,如JSON - 是递归的)。

所以这样做:使用XML解析器。