请帮我定义一个perl正则表达式

时间:2012-05-18 11:31:08

标签: regex perl web-crawler

我对一切都很陌生。请帮忙。我正试图抓住每一个

<div class="name"><a href="/v/name/idlike123123ksajdfk">name</a></div>

在网页中。我想要抓住/ v / name / idlike123123ksajdfk部分。 (知道

<div class="name"><a href="/v/

部分是固定的)所以我写了正则表达式(可以让你笑):

~m#<div class="name"><a href="(/v/.*?)">#

如果你纠正我的愚蠢代码,将会非常有帮助。

4 个答案:

答案 0 :(得分:6)

使用robust HTML parser(请参阅http://htmlparsing.com/了解原因):

use strictures;
use Web::Query qw();
my $w = Web::Query->new_from_html(<<'HTML');
<div class="name"><a href="/v/name/idlike123123ksajdfk">name</a></div>
<div class="name"><a href="/v/name/idlike123123ksajdfk">name</a></div>
<div class="name"><a href="/v/name/idlike123123ksajdfk">name</a></div>
<div class="name"><a href="/v/name/idlike123123ksajdfk">name</a></div>
<div class="name"><a href="/v/name/idlike123123ksajdfk">name</a></div>
HTML

my @v_links = $w->find('div.name > a[href^="/v/"]')->attr('href');

答案 1 :(得分:1)

有很多Perl模块可以从HTML中提取链接。 WWW::MechanizeMojo::DOMHTML::LinkExtorHTML::SimpleLinkExtor可以做到这一点。

答案 2 :(得分:1)

使用Mojolicious进行网络搜索可能是现在在Perl中最简单的方法

http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook#Web_scraping

答案 3 :(得分:0)

你应该不使用正则表达式来解析HTML ,因为有很多库用于这种解析。

Daxim的回答就是一个很好的例子。


但是,如果您仍然想要使用正则表达式并将文本分配给$_,那么

my @list = m{<div class="name"><a href="(/v/.*?)">}g;

将为您提供所有调查结果的清单。