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

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