gudn tach!
es geht hier ein wenig drunter und drueber was das maskieren von backslashes betrifft.
/(komplexer ausdruck)([a-zA-Z]|([\]{2})+)(komplexer ausdruck)/
[\] hat keinen Sinn.
in php-syntax hat es sinn, wenn man davon ausgeht, dass es sich tatsaechlich um den regulaeren ausdruck handelt und nicht um den string, der an preg_match (oder was auch immer) uebergeben wird.
preg_match('/[\\]/', $s, $r);
wuerde genauso wie
preg_match("/[\\]/", $s, $r);
zu einer syntaxfehlermeldung fuehren.
dagegen wuerde
preg_match('/[\\\\]/', $s, $r);
genau ein backslash matchen; waere also dasselbe wie
preg_match('/\\\\/', $s, $r);
Diese Sammelgruppe hat ja nur ein Zeichen als Inhalt.
was ist eine sammelgruppe?
Ich würde '([\]{2})' durch '(\\)' ersetzen.
warum?
wenn wir schon die fertigen regulaeren ausdruecke betrachten gilt:
([\]{2}) ist dasselbe wie (\{2}) und dasselbe wie (\\) und wuerde genau zwei backslashes matchen.
wenn wir den kram als strings betrachten gilt:
'([\]{2})' ist ein syntax-fehler und (\\) matcht genau einen backslash. bringt also beides nix.
um zwei backslashes zu matchen, muss man in php also sowas schreiben wie
preg_match('/\\\\{2}/', $s, $r);
oder
preg_match('/\\\\\\\\/', $s, $r);
hmm, perl ist mir da mal wieder viel lieber: $s=~/\\{2}/;
prost
seth