用于去除 HTML 标记的正则表达式

2022-09-03 03:17:01

我有这个HTML输入:

<font size="5"><p>some text</p>
<p> another text</p></font>

我想使用正则表达式来删除HTML标签,以便输出是:

some text
another text

任何人都可以建议如何使用正则表达式来做到这一点?


答案 1

既然你问了,这里有一个快速而肮脏的解决方案:

String stripped = input.replaceAll("<[^>]*>", "");

(Ideone.com 演示)

但是,使用正则表达式来处理HTML是一个非常糟糕的主意。上面的黑客不会处理这样的事情

  • <tag attribute=">">Hello</tag>
  • <script>if (a < b) alert('Hello>');</script>

等。

更好的方法是使用例如Jsoup。要从字符串中删除所有标记,例如,您可以执行 .Jsoup.parse(html).text()


答案 2

使用 HTML 解析器。下面是一个 Jsoup 示例。

String input = "<font size=\"5\"><p>some text</p>\n<p>another text</p></font>";
String stripped = Jsoup.parse(input).text();
System.out.println(stripped);

结果:

some text another text

或者,如果要保留换行符:

String input = "<font size=\"5\"><p>some text</p>\n<p>another text</p></font>";
for (String line : input.split("\n")) {
    String stripped = Jsoup.parse(line).text();
    System.out.println(stripped);
}

结果:

some text
another text

Jsoup还提供了更多优势。您可以使用接受类似jQuery的CSS选择器的方法轻松提取HTML文档的特定部分。它只需要文档在语义上格式正确。自1998年以来已弃用的标签的存在已经不是一个很好的迹象,但是如果您事先深入了解HTML结构,它仍然可行。select()<font>

另请参阅: