Hallo,
ich habe mal eine Frage zu RegExpr.
Ich möchte gerne aus einem Quellcode URLs/Links filtern und diese ausgeben.
Dazu habe ich mir folgendes gebastelt:
sub xxx
{
my $inhalt = shift; #Quelltext
$inhalt =~ s/\r/\s/gi;
$inhalt =~ s/\n/\s/gi;
my $ParamValsearch = qq{
'[^"]*" | # a string in double quotes
'[^']*' | # a string in single quotes
[^\s>]* # or anything terminated by ws or >
};
my $ParamValmatch = qq{
"([^"]*)" | # a string in double quotes
'([^']*)' | # a string in single quotes
([^\s>]*) # or anything terminated by ws or >
};
my $HREFsearch =qq{
<a
(?:\s+[-\w]+\s*=\s*(?:$ParamValsearch))*? # any parameters
(?:\s+href\s*=\s*(?:$ParamValmatch)) # href
};
my $IMGsearch =qq{
<img
(?:\s+[-\w]+\s*=\s*(?:$ParamValsearch))*? # any parameters
(?:\s+src\s*=\s*(?:$ParamValmatch)) # img src
};
my $URLsearch = $HREFsearch."|".$IMGsearch;
my(@links) = ($inhalt =~ /$URLsearch/sgix); # Version 1
#my(@links) = ($inhalt =~ /$URLsearch/smgixoc); # Version 2
return @links;
}
Nun, das funktioniert eigentlich Klasse!!!
Aber: Bei einer Datei, die sehr groß ist und teilweise lange Zeilen beinhaltet, kommt etwas zustande wie:
Link: %22/grafik.gif
das %22 ist ein encodiertes '"', wie ich herausfand. Aber ich weiß nicht, warum er das zum URL hinzufügt. Schließlich soll das laut
$ParamValsearch/$ParamValmatch eine Grenze dazu sein.
Noch ein Hinweis:
Version 1 macht in der betreffenden Seite weniger solcher Fehler als Version 2 !!! Bei Version 2 treten zusätzlich abgeschnittene URLs auf.
Mache ich grundsätzlich etwas falsch bzw. welchen Schalter soll ich genau nehmen.
Danke!
Uwe