Felix Riesterer: wieder regex-problem

Beitrag lesen

Liebe Selfer,

ich filtere HTML-Tags heraus, um sie durch eine eigene Form von BB-Code zu ersetzen. Das funktioniert auch ganz gut, nur bei einem speziellen Tag (<sup>) gibt es Schwierigkeiten. Bei <sup> wird _immer_ das erste öffnende und das letzte schließende Tag im Text ersetzt. Eventuell dazwischen vorhandene öffnende und schließende <sup>-Tags werden belassen. Hier mein Script (Ausschnitt):

// Schriftformatierungen umwandeln
      $formatierungen = array("unterstrichen" => "u", "fett" => "b", "kursiv" => "i", "tiefgestellt" => "sub", "hochgestellt" => "sup");
      foreach($formatierungen as $formatierung => $tag)
         {
         $suchmuster = '/(?i)<'.$tag.'>(.*)(?<!</'.$tag.'>)</'.$tag.'>/';
         $ersetzung = '['.$formatierung.':\1]';
         $quelltext = preg_replace($suchmuster, $ersetzung, $quelltext);
         }

Dieses Script macht Folgendes: Aus "<b>fetter</b> Text" wird "[fett:fetter] Text". Aus "<i>kursiver</i> Text <i>mit</i> Anfang" wird "[kursiv:kursiver] Text [kursiv:mit] Anfang".
Aber: aus "Test-<sup>schrift</sup> mit zwei<sup>hoch 4</sup>" wird leider "Test-[hochgestellt:schrift</sup> mit zwei<sup>hoch 4]".
Warum? Meine Foreach-Schleife und mein Suchmuster funktionieren doch bei allen anderen Tags tadellos! Was ist an <sup> so anders?

Wer weiß Rat? Ich bin für jede Idee dankbar, denn ich komme hier einfach nicht weiter.

Liebe Grüße aus Ellwangen,

Felix Riesterer.