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...