【问题标题】:Remove Some HTML tags with RegExp and Java使用 RegEx 和 Java 删除一些 HTML 标签
【发布时间】:2011-11-12 22:35:31
【问题描述】:

我想从字符串中删除 HTML 标记。 这很容易,我知道,我这样做了:

public String removerTags(String html)  
    {  
        return html.replaceAll("\\<(/?[^\\>]+)\\>", " ").replaceAll("\\s+", " ").trim();  
    }  

问题是我不想删除所有标签..我想要标签

<span style=\"background-color: yellow\"> (text) </ span>

在字符串中保持原样..

我在使用 GWT 搜索 Web 应用程序时将其用作一种“亮点”...

我需要这样做,因为如果搜索找到包含一些 HTML 标记的文本(索引由 Lucene 完成),并且它被破坏,则来自 safeHTMLBuilder 的 appendHTML 无法挂载字符串。

你能以相当好的方式做到这一点吗?

拥抱。

【问题讨论】:

  • 这些天来这些问题非常频繁。为什么我们不能将类似的问题聚集在一起? #SO 提示 ;)
  • 确保您也将实体参考值考虑在内。

标签: java html regex


【解决方案1】:

我强烈建议您使用JSoup 来完成此任务。正则表达式根本不适合这个任务imo。使用 JSoup,这基本上是一个简单、可读且易于维护的单行代码!

看看JSoup.clean 方法,也许还有这篇文章:

【讨论】:

  • 这将删除我所有的 HTML 标签。
  • 哦不...您可以为该方法提供一个您不希望它干扰的标签的白名单。
  • 我刚刚“解决”了我的问题,我在突出显示之前删除了标签...所以,在此之后只会出现正确的标签!谢谢老兄。
【解决方案2】:

我过去使用过的一个效果很好的库是OWASP AntiSamy

这绝对允许将标签列入白名单/黑名单。可能值得一看。

【讨论】:

  • 谢谢,下次我需要做这种事情时,我会记住那个库。
【解决方案3】:

我找到了一个只使用正则表达式的解决方案:

public static String filterHTMLTags(String html) {

    // save valid tags:
    String striped = html.replaceAll("(?i)\\<(\\s*/?(a|h\\d|b|i|em|cite|code|strong|pre|br).*?/?)\\>", "{{$1}}");
    // remove all tags:
    striped = striped.replaceAll("\\<(/?[^\\>]+)\\>", " ");
    // restore valid tags:
    striped = striped.replaceAll("\\{\\{(.+?)\\}\\}", "<$1>");

    return striped;
}

确保不要在 html 内容中使用“{{ ... }}”。您可以轻松更改此“保存顺序”。有效标签定义在第一个 replaceAll 正则表达式列表中:

(a|h\d|b|i|em|cite|code|strong|pre|br)

上面列表中的“h\d”表示“h1,h2,...”是有效标签。

我用这段代码对此进行了测试:

public static void main (String[] args) {

    String teste = " <b>test bold chars</b> <BR/> <div>test div</div> \n" +
            " link: <a href=\"test.html\">click here</a> <br />\n" +
            " <script>bad script</script> <notpermitted/>\n";

    System.out.println("teste: \n"+teste);
    System.out.println("\n\n\nstriped: \n"+filterHTMLTags(teste));
}

再见, 塞尔吉奥·菲格雷多 - My blog

【讨论】:

    猜你喜欢
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 2014-10-08
    • 2012-04-11
    • 2013-08-01
    • 2020-03-10
    • 1970-01-01
    相关资源
    最近更新 更多