Wuk: Reguläre Ausdrücke / BBCode

Beitrag lesen

PHP, Reguläre Ausdrücke,

Hallo

ich habe ein Ausdruck aus einem Beispiel (1443) der Seite http://php.net/preg_replace_callback abgeleitet und für einen BBCode parser verwendet den ich für ein privates Projekt gebaut habe.

$regex="#[".$tag."(|(,)([^],]*))](|(?:[[1]|[(?!/?".$tag."(|(,)([^],]*))])|(?R))+)[/".$tag."]#isU

Der sucht nach einem Tag und dessen endTag, achtet aber darauf ob es noch innere gleichnamige Tags (verschachtelt) gibt
((zb  1[big]2[big]3[/big]4[/big]5 )
Es können aber auch Tags mit einem Parameter vorkommen (bsp [a,url]text[/a] )

Das ganze funktioniert soweit sehr gut. Wenn nun aber zwischen einem Tag eine große Menge Zeichen (mehrere KB) stehen, dann bricht das Skript scheinbar ohne Fehler ab und gibt gar nichts aus.

Ändere ich den Ausdruck in eine nicht verschachtelten Version
$regex = "#[".$tag."(|(,)([^],]*))](.*)[/".$tag."]#isU";
So tritt der Mengenfehler nicht auf.

Also muss ich was am Ausdruck falsch gemacht haben. Kann mir da jemand eine Anregung oder einen Tip geben? Ich suche den Fehler schon eine Weile und es kann nur noch an diesem Ausdruck liegen. Die rekursive Funktion in dem Ausdruck scheine ich wohl nicht wirklich zu verstehen.

Die Haupt-Parse-Funktion:
http://xtrader.addix.net/~xtweb/hilfeDateien/beispielcode.txt

Eine Seite mit Eingabefeld die ich zu Testzwecken benutze:
http://xtrader.addix.net/~xtweb/hilfeDateien/testForm.php

Einmal Inhalt mit nur einem Tag paar und genug Zeichen damit es abbricht:
http://xtrader.addix.net/~xtweb/hilfeDateien/beispielinhalt.txt

Hat jemand eine Idee? Ich wäre dankbar für jede Hilfe.


  1. ↩︎