来自perlfaq9:如何从字符串中删除 HTML?
最正确的方法(尽管不是最快的)是使用 CPAN 中的 HTML::Parser。另一种最正确的方法是使用 HTML::FormatText,它不仅会删除 HTML,还会尝试对生成的纯文本进行一些简单的格式化。
许多人尝试使用简单的正则表达式方法,例如 s/<.*?>//g,但在许多情况下都失败了,因为标签可能会在换行符处继续,它们可能包含带引号的尖括号,或者 HTML 注释可能出席。另外,人们忘记转换实体——例如 < 例如。
这是一种适用于大多数文件的“头脑简单”的方法:
#!/usr/bin/perl -p0777
s/<(?:[^>'"]*|(['"]).*?\1)*>//gs
如果您想要更完整的解决方案,请参阅http://www.cpan.org/authors/id/T/TO/TOMC/scripts/striphtml.gz中的 3 阶段 striphtml 程序。
以下是您在选择解决方案时应该考虑的一些棘手案例:
<IMG SRC = "foo.gif" ALT = "A > B">
<IMG SRC = "foo.gif"
ALT = "A > B">
<!-- <A comment> -->
<script>if (a<b && a>c)</script>
<# Just data #>
<![INCLUDE CDATA [ >>>>>>>>>>>> ]]>
如果 HTML 注释包含其他标签,那么这些解决方案也会中断如下文本:
<!-- This section commented out.
<B>You can't see me!</B>
-->