我正在改进我为我下载了一些壁纸的旧脚本。我需要知道一个类别有多少页壁纸。每个链接都有页面编号作为其文本,即:
<a href="/planes-desktop-wallpapers/page/8">8</a>
<a href="/planes-desktop-wallpapers/page/9">9</a>
<a href="/planes-desktop-wallpapers/page/10">10</a>
所以我需要捕获数字十,但我不是很精通正则表达式,在这种情况下如何检索页数?
提前tnx!答案 0 :(得分:5)
您不希望使用正则表达式解析HTML
。在这种情况下,使用正则表达式迟早会伪造您的数据。使用模块为您完成此操作会好得多。
在此示例中,我们使用HTML::TreeBuilder
和List::Util
。如果你想要每个类别中最高的,另一种方法是使用TreeBuilder :: XPath来查询特定部分中的所有部分。
use strict;
use warnings;
use HTML::TreeBuilder;
use List::Util qw( max );
my $data
= '<a href="/planes-desktop-wallpapers/page/8">8</a>\n'
. '<a href="/planes-desktop-wallpapers/page/9">9</a>\n'
. '<a href="/planes-desktop-wallpapers/page/10">10</a>'
;
my $tr = HTML::TreeBuilder->new_from_content($data);
my @vals =
map { [ $_->attr('href'), $_->content_list ] }
max ( $tr->look_down( _tag => 'a') );
use Data::Dumper;
print Dumper \@vals;
__OUTPUT__
$VAR1 = [
[
'/planes-desktop-wallpapers/page/10',
'10'
]
];
如果您只需要文本(数字),请执行以下操作:
my @vals = map { $_->content_list } max ( $tr->look_down( _tag => 'a') );
答案 1 :(得分:3)
免责声明:一般来说,使用正则表达式解析HTML是不受欢迎的。参见:
RegEx match open tags except XHTML self-contained tags
但这看起来像一个非常有限/简单的情况,所以要使用正则表达式,你可以使用这个:
my $string = '<a href="/planes-desktop-wallpapers/page/8">8</a>';
$string =~ /a href="\/planes-desktop-wallpapers\/page\/(\d+)">(\d+)<\/a>/;
my $pageNumber = $1;
print $pageNumber . "\n";