Achim Schrepfer: Mal wieder ein RegEx-Problem

Beitrag lesen

Hi CK,

/[([bi]):(.*?[^\])]/
Das kann aber nicht funktionieren.
Es kann :)

Da bist du dem typischen PHP-Programmierer-Fehler
aufgesessen. Du uebergibst der RegEx-Engine einen String,
also musst du escapen:
preg_replace("/\[([bi]):(.*?[^\\])\]/",....);

*g* ich übergebe Strings meistens in Single-Quotes, damit ich mir sowas erspare.

Dafuer gibt es den e-Flag. Du musst halt den String, den du
im Ersetzungsteil bekommst, per str_replace() oder so
saeubern, z. B. so:
  preg_replace("/\[([bi]):(.*?[^\\])\]/e","str_replace($1,'\]',']');",$txt);

das e-Flag! Das war der Durchbruch! Obwohl es bei mir jetzt so aussieht:
preg_replace('/[([bi]):(.*?[^\])]/e','"<\1>".str_replace("]","]","\2")."</\1>"',$text);

Ach ja, die double quotes hab ich grad durch single quotes ersetzt, weil sonst würden in "\2" Variablennamen expandiert werden und das will ich natürlich auch nicht *g*.

kann sein, dass du das $1 noch in '' schreiben musst.

$1 wäre im Zweifel $2 und der "haystack" steht bei preg_replace als drittes Argument. Das hat mich zunächst ganz schön verwirrt, Christian! ;-)

Auf jeden Fall scheint es jetzt zu funktionieren. Danke nochmal und frohe Weihnachten.

viele Grüße
Achim Schrepfer