我试图在xml中从头到尾找到一个标记,并将其替换为空白。样本xml是这样的
<lins>
<lin index="1"> ...<feature>Something</feature>... </lin>
<lin index="2">...<feature>Something</feature>... </lin>
<lin index="3">...<feature>Something</feature>....</lin>
<lin index="1">...<feature>Icom</feature>... </lin>
<lin index="2">...<feature>Icom</feature>... </lin>
<lins>
每当我看到介于两者之间的Icom时,都需要将
<lin>
删除为</lin>
<lin\s(.+?Icom.+?)+</lin>
删除所有lin项目,因为它匹配第一个begin <lin>
标签和最后一个lin end标签。非常感谢您可以提出一种解决方法。我也无法在我的情况下使用xml解析器。 最佳答案
String result = subject.replaceAll("(?s)<lin\\b(?:(?!</lin).)*Icom(?:(?!</lin).)*</lin>", "");
除非您将
<lin>
标记彼此嵌套在一起(或在注释/字符串内部),否则应该这样做。说明:
<lin\b # Match <lin (but not link or linen)
(?: # Match...
(?!</lin) # as long as we're not at a closing tag
. # any character
)* # any number of times.
Icom # Match Icom
(?:(?!</lin).)* # (as above:) Match any character except closing tag
</lin> # Match closing tag