如何在Java中删除HTML标记

时间:2009-11-09 06:01:13

标签: java html regex

是否有可以完全删除HTML标记的正则表达式? 顺便说一下,我正在使用Java。

7 个答案:

答案 0 :(得分:22)

JSoup 是一个用于HTML操作的java库。查看clean()方法和WhiteList对象。易于使用的解决方案!

答案 1 :(得分:20)

您应该使用HTML解析器。我喜欢htmlCleaner,因为它给了我一个漂亮的HTML版本。

使用htmlCleaner,您可以:

TagNode root = htmlCleaner.clean( stream );
Object[] found = root.evaluateXPath( "//div[id='something']" );
if( found.length > 0 && found instanceof TagNode ) {
    ((TagNode)found[0]).removeFromTree();
}

答案 2 :(得分:5)

如果您只需要删除标签,则可以使用此正则表达式:

content = content.replaceAll("<[^>]+>", "");

它只删除标签,但不删除其他HTML内容。对于更复杂的事情,您应该使用解析器。

编辑:为避免HTML评论出现问题,您可以执行以下操作:

content = content.replaceAll("<!--.*?-->", "").replaceAll("<[^>]+>", "");

答案 3 :(得分:4)

没有。正则表达式无法按定义解析HTML。

你可以使用正则表达式s/<[^>]*\>//或类似的东西,但它不够,特别是如果你有兴趣删除标签的内容。

正如另一张海报所说,使用实际的HTML解析器。

答案 4 :(得分:1)

您不需要任何HTML解析器。以下代码删除了所有HTML注释:

htmlString = htmlString.replaceAll("(?s)<!--.*?-->", "");

答案 5 :(得分:0)

或者,如果您的目的是显示用户控制的输入回客户端,那么您也可以将所有<替换为&lt;和所有{{1由>提供。这样,客户端的应用程序(webbrowser)就不会将HTML解释为。

如果您使用JSP作为视图技术,那么您可以使用JSTL的c:out。它默认会转义所有HTML实体。例如,

&gt;

不会显示警告,只是按原样显示实际字符串。

答案 6 :(得分:0)

您可以使用此简单代码删除所有html标记...

htmlString.replaceAll("\\<.*?\\>", ""))