【问题标题】:How to delete HTML and it's content in Java? [closed]如何在 Java 中删除 HTML 及其内容? [关闭]
【发布时间】:2013-08-25 22:39:53
【问题描述】:

我有字符串<strong>Foo</strong>。我想从这个字符串中删除 HTML 标签,即使它的内容也是如此。在此示例中,表达式必须返回 ""(空字符串)。我该怎么做?

【问题讨论】:

  • 你的意思是null,或者你的意思是一个空字符串"" ??
  • 您的数据是否可以包含与<b>x<b>y</b>z</b> 相同的嵌套标签?如果是,那么在 Java 中使用正则表达式可能是不可能的,因为它还不支持递归。
  • 你可以用状态机来做
  • 没有。我的字符串看起来像bar<strong>foo</strong>。我想要的只是bar

标签: java html regex


【解决方案1】:

如果您尝试删除的 html 没有任何嵌套的 html 标签;这是一个简单的基于正则表达式的解决方案。为方便起见,您可以将标签名称分配给tag,正则表达式会相应调整。

String tag = "strong";
String str = "This is <strong>Foo</strong>Bar.";

String regex = "<\\s*" + tag + "[^>]*>[^<]*</\\s*" + tag + "\\s*>";

System.out.println(str.replaceAll(regex, "")); // This is Bar.

正则表达式适用于任何额外的标签属性,例如&lt;strong class="bold"&gt; 等。但如果可能会中断,并且已更新以处理格式稍有错误的 html,例如不必要的空格或新行.

【讨论】:

    【解决方案2】:

    既然你声称你没有嵌套标签,你可以尝试使用"&lt;([^&gt;]+)&gt;.*?&lt;/\\1&gt;

    String data = "bar<strong>foo</strong>yyy<strong>zzz</strong>";
    System.out.println(data.replaceAll("<([^>]+)>.*?</\\1>", ""));
    

    输出

    baryyy 
    

    【讨论】:

    • @downvoter 愿意解释你的行为吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 2021-02-15
    • 2021-07-08
    • 2019-03-21
    • 2017-07-15
    • 1970-01-01
    相关资源
    最近更新 更多