Wie kann ich denn wenn ich jetzt z.B.
$Antwort=~/href="...">/ ;
mache, das ergebniss in eine Variable speichern?
also, dass dann was hier als "..." in einer Variable steht?
Du kannst beliebig viele runde Klammern im regulären Ausdruck setzten. Das, was innerhalb dieser Klammern gefunden wird, wird in spezielle Variablen übertragen, auf die du hinterher zugreifen, sie sichern und verarbeiten kannst.
Mit deinem regulären Ausdruck dort oben wäre das so:
Finde die Zeichenfolge 'href"', dann drei beliebige Zeichen (der Punkt steht für ein beliebiges Zeichen), dann '">'. Das Ergebnis wird wahr, wenn was gefunden wurde, also solltest du das immer mit einer if-Abfrage machen, wenn du willst, daß bei einem Fund was besonderes passiert.
Also:
if ($antwort=~/href="...">/)
{
#hier machen, was beim Finden stattfinden soll
}
Das mit den Klammern ist so: Wenn du wissen willst, welche Zeichen an der Stelle der drei Punkte gefunden werden: Klammere die drei Punkte ein:
if ($antwort=~/href="(...)">/)
{
#Das, was in den Klammern gefunden wurde, steht in $1
#Hurra schreien:
print "href gefunden, Linkziel ist $1";
#Variable für später aufheben:
$linkziel = $1;
}
Das zweite, dritte, vierte... Klammernpaar ist entsprechend in $2, $3 und $4 ... zu finden. Verschachteln geht auch, aber sei da vorsichtig. Ich weiß nicht sicher, was da jeweils zuerst kommt. ;)
Ich habs schon so versucht:
$XYZ=($Antwort=~/href="...">/);
Hier speicherst du wahr oder falsch in $XYZ, je nachdem, ob gefunden oder nicht.
und so
@XYZ=($Antwort=~/href="...">/);
Diese Zuweisung ist falsch, weil @XYZ ein Array ist, das Ergebnis des regulären Ausdrucks aber vom Typ Booelan.
und so
$Antwort=~/href="...">/ ;
$XYZ=$_;
Tja, wenn du mit oben vergleichst, fast ein Treffer... ;)
Aber es ging nicht :(
Ach da fällt mir eine weitere Frage ein:
Was ist denn dann wenn ich mehrere Links habe ?
Der reguläre Ausdruck sucht nur in der Variablen, die vorne dransteht vorn dem =~. Was da nicht drinsteht, wird nicht durchsucht.
Wenn du also eine gesamte Datei durchsuchen willst, dann mußt du die zeilenweise einlesen, jede Zeile durchsuchen, und die gefundenen Zeilen oder Zeilenbestandteile einzeln ausgeben.
Also:
open(HTMLFILE,"htmldateiname.html);
while (<HTMLFILE>)
{
if ($_=~/***HIER REGULÄRER AUSDRUCK***/)
{
print "Hurra, gefunden."
# mit dem Muster von oben...
# speichern, ausgeben, je nachdem, was du willst.
}
}
close(HTMLFILE);
Der Code ist nicht vollständig, dient nur als Ideengeber. ;)
- Sven Rautenberg