Andreas Dölling: Regex: [ und ] entfernen

Beitrag lesen

Hallo,

$content = ereg_replace('/([.*])', '', $content);
$content = preg_replace('/([*])/U', '', $content);
$content = ereg_replace('([.*])', '', $content);

Während der erste überhaupt nicht funktioniert, entfernt der zweite jeweils nur die schließende ].

Ja, der erste Ausdruck hat keine gültige Syntax, denn der schließende Delimiter (/) fehlt. Ansonsten wäre das der richtige _Ansatz_.
Der zweite ist für Deine Zwecke unbrauchbar: er sucht nach einem ']', vor dem beliebig viele '[' stehen, findet also z.B. [], [[], [[[] oder eben ]. Letzteres ist bei Dir der Fall.

Der dritte hingegen funktioniert an sich - nur entfernt der mir ein bisschen zu viel, also eigentlich alles :(

Na klar: Dein dritter regulärer Ausdruck sucht nach einem '[', gefolgt von n _beliebigen_ Zeichen, gefolgt von einem ']', also z.B. '[' plus 'tag]Hier der Text[\tag' plus ']'.

Probiere es mal so:
$content = preg_replace('/[[^]]+]/', '', $content);
Sieht durch die vielen [ und ] etwas verwirrend aus, ist aber ganz einfach: suche ein '[', gefolgt von 1 bis n Zeichen, die _nicht_ ']' sein dürfen, gefolgt von einem ']'.
Der Ausdruck [^]] definiert eine sogenannte Zeichenklasse. Innerhalb einer solchen Zeichenklasse kannst Du entweder alle zulässigen Zeichen auflisten oder - durch Negierung mit '^' - alle Zeichen, die nicht zulässig sind.

Alles klar?
;)

Ciao,
Andreas

--
"Das Corporate Design für das Internet sieht eine Reihe von Grafikelementen vor, die die Optik der Webseite visuell und funktionell beeinflussen." - (Zitat aus dem "Styleguide Corporate Design"  eines großen Konzerns...)