如何在Java中删除HTML标记

如何在Java中删除HTML标记,java,html,regex,Java,Html,Regex,是否存在可以完全删除HTML标记的正则表达式? 顺便说一下,我正在使用Java。您应该使用HTML解析器。我喜欢,因为它给了我一个漂亮的HTML打印版本 使用htmlCleaner,您可以执行以下操作: TagNode root = htmlCleaner.clean( stream ); Object[] found = root.evaluateXPath( "//div[id='something']" ); if( found.length > 0 && found

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

您应该使用HTML解析器。我喜欢,因为它给了我一个漂亮的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();
}

不可以。根据定义,正则表达式不能解析HTML

您可以使用正则表达式来
s/]*\>/
或类似的简单方法,但这是不够的,尤其是如果您对删除标记的内容感兴趣的话


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

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

content = content.replaceAll("<[^>]+>", "");
content=content.replaceAll(“]+>”,“”);
它将只删除标记,但不会删除其他HTML内容。对于更复杂的事情,您应该使用解析器

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

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

或者,如果您的目的是将用户控制的输入显示回客户端,那么您也可以将所有
替换为
。这样,HTML就不会被客户机的应用程序(webbrowser)按原样解释

如果您使用JSP作为视图技术,那么您可以使用JSTL来实现这一点。默认情况下,它将转义所有HTML实体。比如说

<c:out value="<script>alert('XSS');</script>" />


将不显示警报,但只按原样显示实际字符串。

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

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

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

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


htmlString=htmlString.replaceAll(“(?s)”,”

由于您不使用任何肉类字符
^
$
,可以省略
s
-和
m
标志。如果HTML包含嵌入“”字符的XML注释,则此正则表达式可能会导致损坏。感谢您将我指向htmlCleaner:)我们需要获取任何库才能使用上述代码吗?和root.evaluateXPath(“//div[id='something']”);在这个“某物”中可以是任何身份证仪式?请让我知道。感谢您将标题输入搜索框,我得到以下信息:。。。你在发帖时没有得到同样的答案吗?我没有发现重复的答案。这些问题涉及从HTML中提取文本:这只会删除开头标记,而不处理结尾标记。我从来不会独自做这样的工作-将HTML解析为纯文本确实是一项艰巨的工作。这对我来说很有效,但可能取决于标记、注释、脚本等的复杂性。因此,对于一个复杂的情况,也许html库应该更好。哇,先生,你真的让我开心,我喜欢,是的!Markdownj,Markdown4J,htmlCleaner。。他们都很抱歉。。JSoup是唯一一个真正实现这一点的单行程序:String plain=new HtmlToPlainText().getPlainText(JSoup.parse(html));较短的代码是
String plaintext=Jsoup.parse(html.text()@jrarama-一点也不
Jsoup.parse(html).text()
删除所有标记和空白,只留下一行长文本,而
new HtmlToPlainText().getPlainText(Jsoup.parse(html))
以一种简单的方式格式化文本,保留换行符、段落、项目符号,等等@isapir:HtmlToPlainText没有包含在其中,因为HtmlToPlainText就是一个例子,请参见