Кто-то уже упоминал об этом в комментарии, но если вы имеете дело с HTML, у меня есть модуль для извлечения ссылок.Если вы не возражаете против зависимости от HTML :: Parser, это неплохой инструмент:
use HTML::SimpleLinkExtor;
my $extor = HTML::SimpleLinkExtor->new;
$extor->parse($html);
@a_hrefs = $extor->a; # by tag
@hrefs = $extor->href; # by attribute
Я в основном использую этот модуль для быстрой и грязной работы.Поскольку он использует настоящий анализатор HTML, он не будет извлекать ложные срабатывания, такие как похожие вещи в тексте (внутри тегов).
Большинство других людей уже решали проблемы с map
и split
, но вы также должны быть осторожны с регулярными выражениями:
my @hrefs = map {
/ \s href \s* = \s* (['"]) (.*?) \1 /ix ? $2 : ()
} @lines;
Вы можете видеть различные символы цитирования (или их вообще нет), а также теги и атрибуты без учета регистра.Независимо от того, что говорит какая-либо спецификация или стандарт, многие вещи порождают испорченный HTML, и многие браузеры поддерживают его.Я, вероятно, все еще скучаю по этому шаблону.Вот почему я написал модуль.