Uwe Wanzleben: Schalter für RegExpr

Beitrag lesen

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