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

时间:2010-03-30 17:07:02

标签: java regex

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

<sometag>
  <something>
   .....
  </something>
  <item>item1
  </item>
  ....
</sometag>

以下java代码无效:

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

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

3 个答案:

答案 0 :(得分:4)

好吧,如果你想使用正则表达式,那么你可以使用replaceAll。该解决方案使用不情愿的量词和反向引用:

String cleanxml = rawxml.replaceAll(".*?(<item>.*)", "$1");

或者,您可以使用replaceFirst。该解决方案使用积极的前瞻。

String cleanxml = rawxml.replaceFirst(".*?(?=<item>)", "");

但是,仅使用indexOfsubstring更有意义。

String cleanxml = rawxml.substring(rawxml.indexOf("<item>"));

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


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

答案 1 :(得分:3)

  

......正确的做法是什么   这个? ...

由于您询问了正确的方法,正确的方法是解析XML并删除节点并重新序列化为String。您永远不应该使用正则表达式来操作XML或任何其他具有可用解析器的结构化文档(JSON,YAML等)。
对于小型XML,我建议JDOM

答案 2 :(得分:1)

使用

replaceAll

replaceFirst

只需替换将查找字符串匹配 HTH