Ich bin gerade die Tage über eine kleine, nette RegEx gestolpert, die zwar nichts weltbewegendes ist, die ich aber trotzdem erwähnenswert finde.
Und zwar ging es wieder mal darum, aus einer Website einen Link zu extrahieren.
Die folgende kleine Regex holt dann zum Beispiel den href-Teil aus dem <a...>-Tag:
my $link=qq~<a href="test.htm" target="_blank">Ein Link</a>~;
if ($link=~ / href\=([\"\']*)(.*?)\1[\s\/>]/is) {
$ergebnis =$2;
}
else
{
$ergebnis='Kein Link da';
} print $ergebnis;
Wie gesagt, nichts weltbewegendes, aber wer im Hinterkopf hat, daß solche Linkangaben mit " und ' oder auch ohne " und ' angegeben werden können, der lernt diese kleine RegEx schon zu schätzen.
Natürlich Könnte man das Ganze auch für alle anderen Parameter verwenden:
my $gesucht=shift;
if ($line=~ / $gesucht\=([\"\']*)(.*?)\1[\s\/>]/is) {
return $2;
}
else
{
return "Kein $parameter da";
}
}
Warum ich mich da jetzt so dran hochziehe?
Nun, interessant ist die RegEx, besonders das $gesucht\=([\"\']*)(.*?)\1[\s\/>], also die \1.
Denn die speichert die Anführungszeichen oder das '-Zeichen, bzw. eben die nicht vorhandenen Anführungszeichen in \1 und sucht nach den gleichen Zeichen, oder auch nichtvorhandenen Zeichen, die dazugehören. Äh, wie?
Also:
Gegeben ist:
href="test.htm"
Die Regex sucht also nach
href="test.htm" , da die "-Zeichen als Paar erkannt werden. Gleiches gilt für '-Zeichen, oder auch wenn keine Zeichen vorhanden sind.
...
Naja, auch wenn ich vielleicht den Sinn nicht so ganz rüberbringe: Ich find's gut!