Reguläre Ausdrücke. Hilfe, beim pattern schreiben

Scared

Mitglied
Nabend!
Also ich möchte aus einer db die einträge aus einem phpbb forum auf einer seite ausgeben.
Theorie ja ganz simpel, Text auslesen und ausgeben.
Das Problem ist allerdings nun der bbcode.
wenn ich z.b. im forum eine liste erstelle wird folgendes in die db geschrieben:

Code:
   [list:ef12e63035]
 [*:ef12e63035]juhu
 [*:ef12e63035]ich
 [*:ef12e63035]glaub
 [*:ef12e63035]es geht
 [/list:u:ef12e63035]

Um das auf meine Seite wieder als Liste auszugeben dachte ich mir ich mache das ganze mit preg_replace.
Leider bekomme ich es einfach nicht hin das der "code" richtig umgeschrieben wird.
Gerade wenn man 3 Tabellen untereinander macht wird es noch etwas schwieriger.
Mein Suchmuster sieht so aus:
Code:
!\[list:[a-zA-Z0-9]*\](.*?)\[\*:[a-zA-Z0-9]*\](.*?)\[\/list:u[:a-zA-Z0-9]*\]sU!;

Ich hatte mal ein besseres aber die Datei habe ich aus versehen überschrieb und jetzt muss ich von vorne anfangen, ich hoffe es kann mir jemand helfen denn ich verzweifle daran noch :(
 
Schau dir doch einfach mal an, wie es das phpbb-Forum macht. Das ist ein recht komplexes Thema, und nicht so ohne weiteres zu beantworten. Ich hab zwar auch schon Funktionen zum implementieren geschrieben, aber die wären etwas zu lang, um sie mal eben zu posten.
Ich weiß ja nicht, wieviel Erfahrung du mit PHP hast, aber an sowas sollten sich nur Leute wagen, die sich wirklich auskennen.
 
Ich habe mich schon durch die phpbb Dateien gewuselt und der Grund warum ich es "auf meine Weise" machen will ist der das in dem phpbb die bbcode_uid angefügt wird.
Das einzige was ich brauiche ist ein funktionierendes Suchmuster das den oben angegeben Code findet.
Die bbcode_uid umgehe ich ja mit:
Code:
:[a-zA-Z0-9]*
 
Für die List-Tags:
Code:
\[list:[0-9a-zA-Z]\]
Für die Items:
Code:
\[*:[0-9a-zA-Z\](.*)
Allerdings wirst du da Probleme bekommen, wenn jemand z.B.
Code:
[list.]bla[*.]blub[/list.]
schreibt.
 
Oliver Gringel hat gesagt.:
Für die List-Tags:
Code:
\[list:[0-9a-zA-Z]\]
Für die Items:
Code:
\[*:[0-9a-zA-Z\](.*)
Allerdings wirst du da Probleme bekommen, wenn jemand z.B.
Code:
[list.]bla[*.]blub[/list.]
schreibt.

Das wird nicht klappen, da das Sternchen (*) mit einem Backslash escaped werden muss. Wenn man den Modifier g (global) setzt muesste auch dein Beispiel gematched werden.
 
Danke für die Hilfe bisher.
Nun das Problem was ich hatte - als ich einen "fast" guten Ausdruck hatte - war das es erst Probleme gab als man z.b. 2 Listen untereinander geschrieben hat.
Es wurde dann nämlich das erste
[list]mit dem letzten
[/list] verknüpft und die dazwischen wurden als Text ausgegeben.
Zur Info, ich habe den s modifier (da ich Probleme mit Zeilenumbrüchen hatte und die irgendwie nur so beheben konnte) und den U modifier verwendet.
Allerdings hat das nicht viel gebracht.

Zur Zeit sieht mein Suchmuster so aus:
Code:
   $suchmuster[1] = "!\[list:[a-zA-Z0-9]*\](.*?)\[\*:[a-zA-Z0-9]*\](.*?)\[\/list:u[:a-zA-Z0-9]*\]sU!";

Kann man nicht irgendwie aus dem (.*?) Bereich irgendwie Zeichen ausschließen? Z.B. eckige Klammern? Das wäre zwar nicht ideal, aber ich bezweifle das ich in einer Liste jemals eckige Klammern brauche *g*
 
Zuletzt bearbeitet:
Zurück