【问题标题】:How to remove HTML tag in Java [duplicate]如何在Java中删除HTML标签[重复]
【发布时间】:2010-12-14 12:48:24
【问题描述】:

有没有可以完全去除HTML标签的正则表达式? 顺便说一句,我正在使用 Java。

【问题讨论】:

标签: java html regex


【解决方案1】:

没有。正则表达式不能根据定义解析 HTML。

您可以对s/<[^>]*\>// 使用正则表达式或类似的简单方法,但这将是不够的,尤其是如果您有兴趣删除标签的内容。

正如另一位发帖者所说,使用实际的 HTML 解析器。

【讨论】:

    【解决方案2】:

    您不需要任何 HTML 解析器。下面的代码删除了所有的 HTML cmets:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 哇,先生,真的让我很开心,我喜欢这样,是的! 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 不包含在mvnrepository.com/artifact/org.jsoup/jsoup/1.11.3
      • 那是因为HtmlToPlainText就是一个例子,见github.com/jhy/jsoup/blob/master/src/main/java/org/jsoup/…
      【解决方案4】:

      你可以使用这个简单的代码来删除所有的html标签...

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

      【讨论】:

      • 这只会删除开始标签,而不处理结束标签。
      • 我永远不会独自完成这样的工作 - 将 html 解析为纯文本确实是一项艰巨的工作......
      • 它对我有用,但可能取决于标签、cmets、脚本等的复杂性。因此,对于复杂的情况,也许 html 库应该更好。
      【解决方案5】:

      或者,如果您的意图是显示用户控制的输入返回给客户端,那么您也可以将所有&amp;lt; 替换为&amp;lt; 并将所有&amp;gt; 替换为&amp;gt; .这样,客户端的应用程序(网络浏览器)就不会按原样解释 HTML。

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

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

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

      【讨论】:

        【解决方案6】:

        如果你只需要删除标签,那么你可以使用这个正则表达式:

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

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

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

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

        【讨论】:

        • 由于您不使用任何肉类字符 .^$,因此可以省略 s- 和 m 标志。
        • 如果 HTML 包含嵌入了 '' 字符的 XML cmets,此正则表达式可能会导致损坏。
        【解决方案7】:

        您应该改用 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();
        }
        

        【讨论】:

        • 感谢您指向 htmlCleaner :)
        • 我们是否需要获取任何库才能使用上面的代码?和 root.evaluateXPath("//div[id='something']");在这个“某事”中可能是任何身份仪式吗?请告诉我。谢谢
        猜你喜欢
        • 2012-06-29
        • 2010-11-10
        • 2012-12-06
        • 2013-04-28
        • 2012-12-29
        • 2020-01-12
        • 2011-10-30
        • 2011-05-24
        • 2019-05-01
        相关资源
        最近更新 更多