Een tijdje geleden heb ik aan een reguliere expressie in perl gewerkt die een redelijk complete oplossing geeft om alle links te extraheren uit een HTML file. In veel gevallen kan het gebruik van deze simpele regexp ten opzichte van een oplossing met bijvoorbeeld HTML::LinkExtor performance winst opleveren.
De onderstaande reguliere expressie houdt rekening met:
- Dubbele en enkele quotes;
- Eventueel tussengevoegde spaties;
- Ankers in de url;
- HREF hoeft niet het eerste attribuut te zijn
Bijvoorbeeld:
<a href="http://domain.ext/">link</a>
<a id='link' href='http://domain.ext/index.php#top'>link</a>
REGEXP
while( $html =~ m/<A\s+[^>]*HREF\s*=\s*[\'\"]([^\s\'\"#>]*)/gis )
{
next if ($1 eq ''); #skip if empty
my $link = $1;
#do here something with $link
}