Thomas Urban: wieder regex-problem

Beitrag lesen

Hallo,

$suchmuster = '/(?i)<'.$tag.'>(.*)(?<!</'.$tag.'>)</'.$tag.'>/';

Vielleicht wäre der Einsatz eines XML-Parsers o.ä. eher zu empfehlen. Deine RegExp hat als Schwachpunkt den Teil in der Mitte: (.*) ... diese Regel ist zu schwach um zu bestimmen, ob nun alles zwischen benachbarten sup-/sup-tags oder eben zwischen den entferntesten tags matchen soll. Bei drei solchen gruppen wäre theoretisch auch eine Match zwischen ersten sup und mittlerem /sup möglich.

Die Lookbehind-Assertion trifft ja nur zu, wenn nicht _unmittelbar_ vor dem </sup> ein zweites </sup> liegt. Dank des .* ist diese Assertion aber dann wieder unwichtig, wenn ein weiter entferntes </sup>-Tag diese Bedingung erfüllt.

Ich denke, regexps sind hier überfordert und man sollte gleich zu einem guten xml-parser greifen.

http://de.php.net/manual/de/ref.xml.php

ist grundlegend flink bei der Sache und abgesehen davon, dass er sich an nicht zusammengehörigen Tags (fehlenden Endtags) stört, ist er äußerst brauchbar.

Grüße, Thomas