正则表达式+ Java - 从标签中提取不起作用!

时间:2011-06-27 18:51:37

标签: java regex

以下内容包含HTML文件(输入)的内容

input = input.replaceAll(".*?<span class=\"xgui.*?\">(.*?)</span>.*?", "<cite>$1</cite>");

想法是删除span元素并保留内容。请注意,span的类可以是xgui 任何。但是,代码无效。

它吐出了这个:

 <h4><span class="xguiitem">Primary</span> field </h4>

哪个与输入相同;也就是说,它根本没有做任何事情。

有什么想法吗?

谢谢:)

3 个答案:

答案 0 :(得分:3)

不要使用regexp来操纵HTML。它可能适用于某些情况,但您尝试使用正则表达式解析无上下文语法。 XSLT是这里的方式。

答案 1 :(得分:1)

作为开始注释(也在评论中提到):请不要使用正则表达式解析任意HTML。

然而,如果你事先知道html结构,并且你有一个非常具体的任务,你可以用正则表达式替换它。

在你的情况下,表达式几乎正常。只是关于表达式开头和结尾的.*?的评论:

  • .*?在任何时候都不会匹配任何东西,因为它不会比没有匹配任何东西都不合适。
  • 开头的
  • .*?会匹配从开始到实际<span...的任何内容,因为早期开始的匹配总是比任何非贪婪都高。

因此,您可以摆脱它们并使用以下

input = input.replaceAll("<span class=\"xgui.*?\">(.*?)</span>", "<cite>$1</cite>");

答案 2 :(得分:-2)

我不明白为什么你有那些“?”到处都可以试试:

input = input.replaceAll(".*<span class=\"xgui.*\">(.*)</span>.*", "<cite>$1</cite>");