das Ich: Aufspalten einer HTML-File in Doctype/Header/Body/...

Hola,

ich habe einen String, in dem sich mehr oder weniger ein komplettes
HTML-Dokument befindet.

Vielleicht jedoch auch ein XHTML-Dokument. Deswegen brauche ich neben
dem head, den ich vorerst vom Rest des Dokumentes (zumindest mir aus-
reichend) mit

list($head, $body) = explode('</head>', $file);

abtrennen konnte, auch noch den Doctype.

Also habe ich mir ein kleines Regular-Expression-Pattern ausgedacht:

preg_match('/^(.*?)(<html.*?>.*?<head.*?>)(.+?)(</head>.+)$/', $file, $matches);

Wie man sieht, habe ich immer nach den .* bzw. .+ ein ? stehen.
Ich bin nämlich ehrlich gesagt zu faul, immer [^>] anstatt . zu
schreiben und gehe jetzt einfach mal davon aus, dass dasda:
http://de.selfhtml.org/cgiperl/sprache/regexpr.htm#gierig_genuegsam
auch bei der PHPlischen Regex-Engine geht.

Er findet nur nix. Gibt's bei der Funktionsvielfalt bei PHP nicht
irgendeine Funktion, die genau sowas erledigt?
Was ist an meinem pattern falsch?

Gruß,

das Ich

  1. Hallo Ich,

    preg_match('/^(.*?)(<html[^>]*>)([^<>]*)(<head[^>]*>)(.*?)(</head>)(.*)/is', $file, $matches);

    // matches[0] = all
       // matches[1] = doctype (if there is) || NOT YET
       // matches[2] = <html> and attributes
       // matches[3] = Area between <html> and <head>
       // matches[4] = <head> and attributes
       // matches[5] = Content of <head>
       // matches[6] = </head> (not more ;)
       // matches[7] = everything after </head> (body,....)

    gruß,

    der ich

    PS: ;-)