Hi,
Mein bisheriger Versuch:
/(<body(?(["'].*>.*["'])…|[^>]*)>(.*)<\/body>)/i
An Stelle des „…“ muss natürlich noch ein brauchbarer Ausdruck, aber mir fällt keiner ein.
Zur leichteren Kommentierung mal in der "Freeform"-Variante (siehe /x modifier):
/
<body #Anfangs mal ein <body
(?: #die Anzahl der Attribute ist 0 bis unendlich
\s+ #zwischen elementname und attributname bzw. zwischen
[a-z]+ #Attributname
(?: #optional hat ein Attribut auch einen Wert
\s* #vor dem = darf whitespace stehen
= #ein =
\s* #nach dem = darf whitespace stehen
(?: #Wert darf in '' oder "" stehen oder ohne Quotes
'[^']*' #Wert in '', evtl. auch leer, erstes ' beendet den Wert
|
"[^"]*" #Wert in "", evtl. auch leer, erstes " beendet den Wert
|
[-a-z0-9._]+ #ggf. auch Wert ohne Quotes [1]
)
)?
)*
\s* #vor dem > kann Whitespace stehen
> #schließt das tag
( #Das wollen wir uns merken!
.*? #sowenig beliebiges wie möglich
) #(nur bis zum ersten (und hoffentlich einzigen) schließenden body-Tag)
</body #der Anfang des schließenden body-Tags
\s* #ggf. Whitespace im schließenden tag
> #schließt das tag
/ix
[1] (keine Garantie auf Vollständigkeit der Zeichenliste, ggf. \S* , wenns invalides HTML ist)
oder einzeilig:
/<body(?:\s+[a-z]+(?:\s*=\s*(?:'[^']*'|"[^"]*"|[-a-z0-9._]+))?)*\s*>(.*?)</body\s*>/i
(ohne Gewähr)
cu,
Andreas
Warum nennt sich Andreas hier MudGuard?
Schreinerei Waechter
Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.