Reguläre Ausdrücke bei BBCodes
Andavos
- php
Hallo,
also ich bin gerade dabei eine BB Code Engine zu verbessern.
Naja dabei bin ich jetzt auf ein Problem gestoßen, dass er den gleichen BB Code nicht innerhalb eines Tags "umwandelt".
Also wenn der User schreibt:
[quote]Orginal von xyz
[quote]Das habe ich nie gesagt[/quote]
Da ware ich doch dabei als du das gesagt hast[/quote]
Ach und wann war das??
Also dann soll er den Rahmen für das Zitat doppelt einfügen, so dass man ein Zitatrahmen in einem Zitatrahmen hat.
Meine Ersetzungsfunktion sieht so aus:
$zitat = "
<table align="center" width="98%">
<tr>
<td>Zitat:</td>
</tr>
<tr>
<td>\1</td>
</tr>
</table> ";
$text = preg_replace("/[QUOTE](.*?)[/QUOTE]/si", $zitat, $text);
Also bei normalen [quote]...[/quote] funktioniert das ohne Probleme, nur wenn da jetzt ein Zitat in einem Zitat steht, wird es wie folgt ersetzt:
<HTML Tags>Orginal von xyz
[quote]Das habe ich nie gesagt</HTML Tags>
Da ware ich doch dabei als du das gesagt hast
Bzw. wenn ich (.*) schreibe:
<HTML Tags>Orginal von xyz
[quote]Das habe ich nie gesagt[/quote]
Da ware ich doch dabei als du das gesagt hast</HTML Tags>
Also ich könnte jetzt da eine While Schleife rein machen:
while(eregi("[QUOTE](.*)[/QUOTE]",$text)) $text = preg_replace(...);
Das klappt dann, aber vielleicht weiß jmd. wie der Reguläre Ausdruck aussehen muss, dass er _jedes_ [quote] ersetzt?
Denn nur so kann man dazu lernen.
Oder ist das nicht möglich? Denn bei den Userkommentaren aus dem PHP Manual waren zwar auch BBCodes Scripts dabei, die hatten aber das gleiche Problem (bzw. die, die ich getestet habe)
MFG
Andavos
Hallo,
also das mit while(...) wäre kein Problem, allerdings wenn ich dort eregi(...) benutze, dann müsste ich die Bedinungen alle etwas umformen, was natürlich auch nicht das gelbe vom Ei ist ;)
Ich hab es mit preg_match($bedingung,$string) versucht, allerdings funktionierte dies nicht.
Gibt es sonst noch eine Funktion, die die gleichen Ausdürcke "akzeptiert" wie preg_replace(), aber den String nur nur durchsucht?
MFG
Andavos
Hallo Andavos,
Das klappt dann, aber vielleicht weiß jmd. wie der Reguläre Ausdruck aussehen muss, dass er _jedes_ [quote] ersetzt?
Das geht mit ausschließlich regulären Ausdrücken nicht. Du könntest den regulären Ausdruck höchstens mehrfach anwenden (was aber u.U. zu anderen Problemen führt) oder so komplizierte Dinge tun, wie bspw. PHPBB sie tut.
Alternativ kannst Du natürlich auch meine Klasse einsetzen. ;-)
Viele Grüße,
Christian