用于去除 HTML 标记的正则表达式
我有这个HTML输入:
<font size="5"><p>some text</p>
<p> another text</p></font>
我想使用正则表达式来删除HTML标签,以便输出是:
some text
another text
任何人都可以建议如何使用正则表达式来做到这一点?
我有这个HTML输入:
<font size="5"><p>some text</p>
<p> another text</p></font>
我想使用正则表达式来删除HTML标签,以便输出是:
some text
another text
任何人都可以建议如何使用正则表达式来做到这一点?
既然你问了,这里有一个快速而肮脏的解决方案:
String stripped = input.replaceAll("<[^>]*>", "");
但是,使用正则表达式来处理HTML是一个非常糟糕的主意。上面的黑客不会处理这样的事情
<tag attribute=">">Hello</tag>
<script>if (a < b) alert('Hello>');</script>
等。
更好的方法是使用例如Jsoup。要从字符串中删除所有标记,例如,您可以执行 .Jsoup.parse(html).text()
使用 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>