Zum Inhalt springen

[RegExp in PHP] verschachtelten BBCode ersetzen


Empfohlene Beiträge

Bin gerade dabei ein Forum in PHP zu programmieren. Zur Zeit arbeite ich an einem BBCode-Handler der eigentlich ganz gut funktioniert. Allerdings hat er Probleme bei verschachtelten Tags.

An alle Perl Programmierer: Das ich in PHP programmiere macht an dieser Stelle nichts, da es primär um das Pattern geht. Also weiterlesen. ;)

Also ich habe folgenden Code um in der Threadansicht die Tags zum Zitieren zu ersetzen.


$pattern = "/(\[QUOTE\])(.*)(\[\/QUOTE\])/isU" ;
$replacement = "<p align=\"center\">
<table class=\"quotetable\">
<tr>
<td><b>Zitat:</b> \\2</td>
</tr>
</table>
</p>" ;
$this->strOutput = preg_replace( $pattern, $replacement, $this->strOutput ) ;[/PHP]

Das funktioniert, wie gesagt, schon ganz gut aber in den speziellen Fällen, dass zwei Zitate ineinader verschachtelt sind nicht. Wenn ich das /U weg lasse wird zum einen der innere Quote nicht ersetzt und zum anderen gibts dann Probleme wenn 2 Quotes hintereinander sind.

Zu dem Problem, dass der innere Quote nicht ersetzt wird habe ich in nem Perlbuch /g für global gefunden. Das kennt die PHP-Funkton aber anscheinend nicht.

Kann mir jemand helfen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hätte es jetzt so gelöst, vielleicht nicht gerade schön, aber es funzt ;)


$string = "test [QUOTE]und noch ein [QUOTE] zitat [/QUOTE] und das äussere ist zu ende [/QUOTE]";
while (preg_match("/(\[QUOTE\])(.*)(\[\/QUOTE\])/is",$string,$pregRes)) {
$replacement = "<p align=\"center\">
<table class=\"quotetable\">
<tr>
<td><b>Zitat:</b> ".$pregRes[2]."</td>
</tr>
</table>
</p>" ;
$string = str_replace($pregRes[0],$replacement,$string);
}
echo $string;
[/PHP]

Edit: Ich bemerkte gerade...da der Ausdruck "gierieg" ist, funzen zwei Quotes nebeneinander nicht, macht man ihn "nicht gierig", funzt die Verschachtelung wieder nicht richtig...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Edit: Ich bemerkte gerade...da der Ausdruck "gierieg" ist, funzen zwei Quotes nebeneinander nicht, macht man ihn "nicht gierig", funzt die Verschachtelung wieder nicht richtig...

Das ist geanu mein Problem.

@Enrico: Ja stimmt, das ist ne Möglichkeit. Finde ich aber eigentlich nicht so schön. Aber wenn sonst keine Ideen mehr kommen, werde ich es wohl so machen müssen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Lösung aus dem PHP-Forum gefiel mir auch nicht so richtig. Ich habe jetzt die Parser-Klasse verwendet. Hat mich zwar ganz schon Zeit gekostet das Teil einzubauen (Tipp: die Callbackfunktionen funktionieren nicht mit Memberfunktionen in einer weiteren Klasse :rolleyes: ) aber jetzt läuft es und funktioniert gut.

Danke für die Hilfe.

Monty, ich wollte noch fragen, was du so machst. Ich habe gesehen, dass du in Aachen wohnst. Ich studiere dort ab diesem Wintersemester Informatik an der FH. Du studierst nicht zufällig auch, oder?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...