我有这种结构的XML:
<root>
<parent>
<t1>...</t1>
<t2>...</t2>
<tagToFind>...</tagToFind>
<tN>...</tN>
</parent>
<tagToFind>...</tagToFind>
</root>
我需要找到<tagToFind>
的第一个条目(实际上,右侧标记位于<parent>
标记内)并替换其中的文字。
我尝试使用正则表达式:
<parent>(\s*.*\s*)*^<tagToFind>(.*)</tagToFind>
但仍然没有运气。任何人都可以给出一个暗示或正确的解决方法吗? 谢谢!
答案 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