David301 Geschrieben 19. September 2005 Teilen Geschrieben 19. September 2005 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 19. September 2005 Teilen Geschrieben 19. September 2005 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 20. September 2005 Teilen Geschrieben 20. September 2005 Versuche doch einen Workaround zu finden. Arbeite mit einem Stack. Packe die geöffneten Tags rauf, erzeuge den Inhalt. Wenn du ein Schliessen-Tag findest, nimmst du das ganze runter. Am Ende hast du dann deinen String fertig. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
David301 Geschrieben 20. September 2005 Autor Teilen Geschrieben 20. September 2005 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 20. September 2005 Teilen Geschrieben 20. September 2005 Hatte ich gestern Abend noch gefunden: http://www.christian-seiler.de/projekte/php/bbcode/index.html http://www.php.de/forum/ftopic45053.html Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
David301 Geschrieben 20. September 2005 Autor Teilen Geschrieben 20. September 2005 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 ) 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 20. September 2005 Teilen Geschrieben 20. September 2005 Ich hätte um ein Haar Aber dem Studium habe ich jetzt erstmal das Sammeln von Berufserfahrung vorgezogen... Können uns ja per PM weiter unterhalten, nächstes Jahr werde ich auch in Aachen selbst wohnen. Ich kenn aber genug, die dort studieren Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.