[Gelöst][REGEX/PHP] Regex für "BB-Tags"

Sebmaster

null != null
ID: 238955
L
20 Mai 2006
3.723
186
Jetzt hab ich schon den ganzen Nachmittag an dem gerätselt, aber komme nun einfach nicht mehr weiter und hoffe deswegen, dass ihr mir helfen könnt:roll:

Ich habe folgenden REGEX (in PHP)
Code:
@\[(?(?=!)(!))(.*?)(?(?==)(.*))\](?:.*)\[/\2\]@isU
Ich wende den mit preg_match auf einen Text an, wobei der REGEX dann folgendes erkennen muss (jeweils fett markiert):

  • text [_testArray["foobar"]] text [/_testArray["foobar"]]
  • text [testvar] text[/testvar]
  • text [testvar=foobar] text[/testvar]
  • text [testArray["foobar"]=foo] text[/testArray["foobar"]]
Das funktioniert auch soweit.
Das Problem was ich aber nun habe, sind die Verschachtelungen. Sobald ich eine Verschachtelung in einem String vorhanden ist, findet dieser REGEX nichts mehr.

Als Beispiel für eine Verschachtelung:
[_testArray["foobar"]=foo][testvar]echo "blabla"[/testvar][/_testArray["foobar"]]

Findet jemand den Fehler so auf Anhieb (oder später)?:roll:
Fehler behoben und Regex ausgebessert:roll:

Mfg
Sebmaster
 
Zuletzt bearbeitet:
Welche Funktion verwendest du in PHP?

Da bspw.:

preg_match_all:

Nachdem die erste Übereinstimmung gefunden wurde, wird die nachfolgende Suche jeweils am Ende der letzten Übereinstimmung fortgesetzt.

Also werden nur alle aufeinanderfolgenden Ausdruecke gefunden, nicht aber verschachtelte.

Moeglichkeit 1: auf jeden "Fund" das Ganze nochmmal anwenden.

Moeglichkeit 2: Warum das "Rad" ueberhaupt neu erfinden, es gibt ja schon 100+1 BBTag Parser in PHP, da sollte einer dabei sein, der deine Bedingungen erfuellt

https://www.christian-seiler.de/projekte/php/bbcode/doc/de/kapitel1.php
 
Welche Funktion verwendest du in PHP?

Ich habe nur preg_match verwendet.

Moeglichkeit 1: auf jeden "Fund" das Ganze nochmmal anwenden.

Das Problem war eben, dass er mir überhaupt nichts gefunden hat:-?

Moeglichkeit 2: Warum das "Rad" ueberhaupt neu erfinden, es gibt ja schon 100+1 BBTag Parser in PHP, da sollte einer dabei sein, der deine Bedingungen erfuellt

https://www.christian-seiler.de/projekte/php/bbcode/doc/de/kapitel1.php

Danke, schau ich mir mal an ;)

Mfg
Sebmaster

EDIT: Aus irgendeinem, mir sehr unerfindlichen Grund, funktioniert das plötzlich :think: Ich hab den Regex gestern nur um eine kleine Funktion (die Umkehrung des Vergleiches) erweitert, getestet, Verschachtelungen haben nicht funktioniert. Aber jetzt scheint er irgendwie zu laufen:ugly:

Ich editier den Regex gleich oben:roll:

Danke für den Post jpwfour:p
 
Zuletzt bearbeitet: