Используйте HTML :: SimpleLinkExtor , HTML :: LinkExtor или одну из других ссылок, извлекающих модули PerlВам вообще не нужно регулярное выражение.
Вот короткий пример.Вам не нужно создавать подклассы.Вам просто нужно указать %HTML::Tagset::linkElements
, какие атрибуты собирать:
#!perl
use HTML::LinkExtor;
$HTML::Tagset::linkElements{'a'} = [ qw( href class ) ];
$p = HTML::LinkExtor->new;
$p->parse( do { local $/; <> } );
my @links = grep {
my( $tag, %hash ) = @$_;
no warnings 'uninitialized';
$hash{class} eq 'foo';
} $p->links;
Если вам нужно собрать URL-адреса для любых других тегов, вы сделаете аналогичные корректировки.процедура обратного вызова, это не так сложно.Вы можете смотреть ссылки, когда парсер сталкивается с ними:
use HTML::LinkExtor;
$HTML::Tagset::linkElements{'a'} = [ qw( href class ) ];
my @links;
my $callback = sub {
my( $tag, %hash ) = @_;
no warnings 'uninitialized';
push @links, $hash{href} if $hash{class} eq 'foo';
};
my $p = HTML::LinkExtor->new( $callback );
$p->parse( do { local $/; <DATA> } );