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