简单的java正则表达式替换问题

Yan*_*ang 5 java regex

我有一个简单的xml文件,我想删除第一个<item>标记之前的所有内容.

<sometag>
  <something>
   .....
  </something>
  <item>item1
  </item>
  ....
</sometag>
Run Code Online (Sandbox Code Playgroud)

以下java代码无效:

String cleanxml = rawxml.replace("^[\\s\\S]+<item>", "");
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?我该如何解决非贪婪问题?对不起,我是C#程序员.

pol*_*nts 4

好吧,如果你想使用正则表达式,那么你可以使用replaceAll. 该解决方案使用了一个勉强的量词和一个反向引用:

String cleanxml = rawxml.replaceAll(".*?(<item>.*)", "$1");
Run Code Online (Sandbox Code Playgroud)

或者您可以使用replaceFirst. 该解决方案使用正向前瞻。

String cleanxml = rawxml.replaceFirst(".*?(?=<item>)", "");
Run Code Online (Sandbox Code Playgroud)

indexOf不过,仅使用and更有意义substring

String cleanxml = rawxml.substring(rawxml.indexOf("<item>"));
Run Code Online (Sandbox Code Playgroud)

replace不起作用的原因是重载charCharSequence重载都不是基于正则表达式的。这是简单的字符(序列)替换。


另外,正如其他人警告您的那样,除非您正在处理简单的 XML,否则不应使用正则表达式。您应该使用实际的 XML 解析器。