我试图在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

10-08 18:39