Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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?

Geschrieben

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...

Geschrieben

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.

Geschrieben
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.

Geschrieben

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?

Geschrieben

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 :)

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...