seth_not@home: Regex: Unterscheidung Anzahl ungerade/gerade?

Beitrag lesen

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