preg_match_all findet nicht alles

kitt

Grünschnabel
Hallo,
Code:
[ LIST]
[*]a
[*]b
[ LIST]
[*]d
[*]e
[*]f
[ /LIST]
[*]c
[ /LIST]
Auf diese Zeichenkette wende ich dieses Suchmuster an:

Code:
preg_match_all("~\[ LIST](.*?)\[ /LIST]~i", $replacetext, $allLists, PREG_PATTERN_ORDER);

Gebe ich jetzt count(allLists[0]) aus, bekomme ich als Ergebnis immer nur 1, es werden also nicht beide Treffer gefunden. Was ist hier falsch? Es scheint fast so, als würde das erste Ergebnis aus dem Text herausgenommen werden, wodurch dann kein zweites Ergebnis mehr gefunden werden kann. Das widerspricht aber irgendwie meinen Gedankengängen. :(
 
Ich frage mich ständig, was so toll an dem sog. BBCode sei:
„[...]Aus praktischer Sicht bringt BBCode nicht viel, da genauso gut HTML-Code in Foren verwendet werden könnte, wobei aus Sicherheitsgründen natürlich nur erlaubte Tags interpretiert werden dürfen (vgl. http://www.wer-weiss-was.de ). Tatsächlich gibt es Sicherheitslücken, die durch den Einsatz von BBCode aufgetreten sind; eine erhoffte erhöhte Sicherheit durch das Verwenden propietärer Tags hat sich damit nicht erfüllt.“
 — BBcode - Wikipedia
Und so viel bequemer sind sie garnicht wie vielleicht manch einer behaupt. Allein die eckigen Klammern sind nur duch akrobatische Tastenkombinationen erreichbar – von den wenigen Formatierungsmöglichkeiten mal abgesehen.

Sonst könntest du auch eine schon bestehende Klasse benutzen, du musst ja nicht „das Rad neu erfinden“:
 ›› patBBCode
 ›› PEAR :: Package :: HTML_BBCodeParser
 
Die beiden Möglichkeiten schenken sich nicht viel, das stimmt. BBCode kann ich ersetzen durch was ich will, also immer durch aktuelles HTML, das ist halt bei direkter Eingabe von HTML schwerer zu realisieren, da mehrere Möglichkeiten bestehen.
Ich will keine bestehende Klasse verwenden, da ich im Zuge der Arbeit daran einiges lernen kann.

Aber mittlerweile habe ich eh eine recht gute Lösung gefunden.
 
Zurück