Seite 1 von 1

Regulärer Ausdruck

Verfasst: Fr 24.Feb, 2006 19:29
von Zyancali
Hi!

Um aus einer HTML-Datei nur die Headtags (eig .nur deren Inhalt) zu bekommen,
benutze ich folgenden RegEx (benutzte Anleitung):

Code: Alles auswählen

<head\s+.*?[^>]*(.*?)<\/head>
Den hab ich mir "zusammenkopiert" bzw geschrieben...

Leider funktioniert das überhaupt nicht...
Bitte bessert mich aus, Danke!

Verfasst: Fr 24.Feb, 2006 20:35
von oxpus
So schon eher:

Code: Alles auswählen

preg_match('#<head(.*?)>(.*?)<\/head>#i', $content, $treffer);
echo $treffer[2];
Wobei $content die HTML-Datei beihaltet und $treffer die Suchergebnisse bekommt.
$treffer[0] ist hierbei der komplette gefundene String, die weiteren Array-Values beinhalten jeweils das Ergebnis der Einklammerungen. $treffer[2] in diesem Falle also alles, was zwischen <head> und </head> steht.
Das echo gibt das nur aus, kann aber auch eine Variablenübergabe oder weitere Verarbeitung sein...

Zum regulären Ausdruck:
Zunächst muss sichergestellt werden, daß im <head>-Tag kein weiterer Eintrag enthalten ist (erste Klammer). Kann ja sein.
Dann eben alles rausfischen, was zwischen den Tags steht mit der 2. Klammer.
In der Klammer wird nun mit dem Punkt nach jedem Zeichen gefahndet, das durch den Stern kein bis unendlich mal vorkommen soll und durch das Fragezeichen immer wiederholt wird, bis der Suchstring eben zu Ende ist.
Durch die Klammerungen werden Unterabfragen erstellt, deren Ergebnisse zwischengespeichert werden. Diese landen dann letztendlich in $treffer, welches als Array eben alle Ergebnisse beinhaltet.

Ja, reguläre Ausdrücken können so schön komplex sein...