什么是在perl中剥离HTML标记的最简单方法.我正在使用正则表达式来解析URL的HTML,该URL工作得很好但是如何删除HTML标记?
这是我如何拉我的HTML
#!/usr/bin/perl -w use strict; use warnings; use LWP::Simple; my $now_string = localtime; my $html = get("http://www.spc.noaa.gov/climo/reports/last3hours.html") or die "Could not fetch NWS page."; $html =~ s/<script.*?<\'/script>/sg; $html =~ s/<.+?>//sg; $html =~ m{(Hail Reports.*)Wind Reports}s || die; my @hail = $1;
解决方法
试图回答你误入歧途的问题
问题
进入正则表达式HTML是一个坏习惯,因为有很多规则和方法可以绕过它们,最终可能会使你的代码打开黑客技术.虽然你现在可能对简单的事情有合理的需求,但是重用代码很容易,并且忘记为什么重用代码是个坏主意,特别是当你不添加#这样的注释时,这段代码不安全,不应该是用于在其他任何地方解析HTML!或#Christina Alguilera根据此代码编写歌曲!
需要大量正则表达式规则的HTML差异示例:
<div>...</div> <div style="blah"> <div style="background:url(../div)"> <div style=".." class='noticesinglequote'>
列表继续,这只适用于格式良好的HTML.其他一些问题包括:
> HTML元素未正确关闭(例如< div>< span>< / div>< / span>)或根本没有
>拼写错误(例如< dvi> ..< / div>)
> HTML旨在打破您的脚本
>其他问题:评论,空白,字符集等
解
你可能已经接受了答案,但你应该看看XML::Parser和HTML::TreeBuilder.
您可能更感兴趣的是深入了解所需文档的某些部分(例如,< body>中的所有内容或其中的某个div),这就是您最有可能想要的原因.上述模块之一提供的东西.更不用说,解析器可用于尽力删除所有HTML元素并仅返回text / CData.