Java正则表达式,第一个标记条目

时间:2015-09-08 08:47:47

标签: java regex

我有这种结构的XML:

<root>
  <parent>
    <t1>...</t1>
    <t2>...</t2>
    <tagToFind>...</tagToFind>
    <tN>...</tN>
  </parent>
  <tagToFind>...</tagToFind>
</root>

我需要找到<tagToFind>的第一个条目(实际上,右侧标记位于<parent>标记内)并替换其中的文字。

我尝试使用正则表达式:

<parent>(\s*.*\s*)*^<tagToFind>(.*)</tagToFind>

但仍然没有运气。任何人都可以给出一个暗示或正确的解决方法吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

如评论中所述,XML解析器可能是更好的解决方案 仍然可以使用给定here的正则表达式解决正则表达式问题,即:

"(.*<parent>.*?<tagToFind>)(.*?)(<\/tagToFind>.*)"
// in java we don't need to escape '/':
"(.*<parent>.*?<tagToFind>)(.*?)(</tagToFind>.*)"

请注意,您需要使用DOTALL编译模式。使用给定的正则表达式,您有一个组,即tagToFind的开头和结尾之间的值。

我刚测试的一个最小例子:

Pattern pattern = Pattern.compile("(.*<parent>.*?<tagToFind>)(.*?)(</tagToFind>.*)", Pattern.DOTALL);

String testString = "<root>\n" +
            "  <parent>\n" +
            "    <t1>...</t1>\n" +
            "    <t2>...</t2>\n" +
            "    <tagToFind>something in the tagToFind</tagToFind>\n" +
            "    <tN>...</tN>\n" +
            "  </parent>\n" +
            "  <tagToFind>...</tagToFind>\n" +
            "</root>";

Matcher m = pattern.matcher(testString);
if(m.matches()){
    System.out.println("Found string");
    System.out.println("Value: " + m.group(2));
}

将输出:

Found string
Value: something in the tagToFind