以下内容包含HTML文件(输入)的内容
input = input.replaceAll(".*?<span class=\"xgui.*?\">(.*?)</span>.*?", "<cite>$1</cite>");
想法是删除span元素并保留内容。请注意,span的类可以是xgui 任何。但是,代码无效。
它吐出了这个:
<h4><span class="xguiitem">Primary</span> field </h4>
哪个与输入相同;也就是说,它根本没有做任何事情。
有什么想法吗?
谢谢:)
答案 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>");