Ashura: Komplexer regulärer Ausdruck mit bedingten Unterausdrücken

Beitrag lesen

Hallo Felix.

/(<body[^>]*>)/i findet alles was mit "<body" anfängt, mit ">" aufhört, und was dazwischen beliebig viele (auch keine) Zeichen enthalten kann, die aber allesamt kein ">" sein dürfen.

Hm. Im Grunde ist dieser übliche Ausdruck überholt, da folgendes sehr wohl erlaubt ist:

<body title="Go to the right ->">  
  <h1>Bla!</h1>  
</body>

Es müsste also auf „<body“ gefolgt von keinem oder einem beliebigen Zeichen und „>“--sofern es sich innerhalb von " oder ' befindet--beliebig oft, gefolgt von „>“ gematcht werden.

Mein bisheriger Versuch:

/(<body(?(["'].*>.*["'])…|[^>]*)>(.*)<\/body>)/i

An Stelle des „…“ muss natürlich noch ein brauchbarer Ausdruck, aber mir fällt keiner ein.

Außerdem erhalte ich sowohl in JS als auch in PHP „Compilation failed: assertion expected after (?(“.
Habe ich die bedingten Unterausdrücke falsch verstanden?

Einen schönen Freitag noch.

Gruß, Ashura

--
sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
mathbr:del.icio.us/ mathbr:w00t/