例如,我们有一些这样的xml
<parent>
<child>SomeText</child>sometext<otherChild>sometext</otherChild>
<child>SomeText2</child>somtext2<otherChild>sometext2</otherChild>
</parent>
可以应用哪个正则表达式以便在</child>
之后和下一个<child>
之前提取内容
该字符串应在第1组中提取sometext<otherChild>sometext</otherChild>
,第2组应包含somtext2<otherChild>sometext2</otherChild>
。
已经尝试过像这样应用正则表达式,但它仅适用于第一场比赛
String textToParse = ...;
Pattern pattern = Pattern.compile("(?<=</child>)(.*?)(?=<child>)", Pattern.DOTALL);
final Matcher matcher = pattern.matcher(textToParse);
if (matcher.find()) {
LOGGER.info(matcher.group());
}
答案 0 :(得分:1)
这应该有效:
Pattern pattern = Pattern.compile("(?<=</child>)(.*?)(?=<child>|</parent>)", Pattern.DOTALL);
添加|</parent>
,因为在上一个匹配项中没有下一个<child>
标记。
此外,您应该再次matcher.find()
和matcher.group()
进入下一场比赛。