Hallo zusammen,
ich bekomme beim Regex.Match eine seltsame Exception bei dem folgenden Fall:
string nr = "69126010";
string expression1 = "6912601?";
string expression2 = "691260??";
string expression3 = "69126???";
Match m = Regex.Match(nr, expression1); // <-keine Exception
Match m = Regex.Match(nr, expression2); // <-keine Exception
Match m = Regex.Match(nr, expression3); // <-Exception!
der genaue Exception lautet:
An unhandled exception of type 'System.ArgumentException' occurred in System.dll
Additional information: "69126???" wird analysiert - Geschachtelter Quantifizierer ?.
Hoffe es kann wer was damit anfangen.
Viele Grüße & danke schonmal.
Hallo ratalert,
ein Fragezeichen steht nicht für ein beliebiges Zeichen, sondern für eine oder keine Wiederholung. Zwei Fragezeichen hintereinander machen also keinen Sinn. Ein Punkt steht für ein beliebiges Zeichen.
Siehe auch [Artikel] Regex-Tutorial.
herbivore
achso,alles klar. danke
Was mich nun wundert: warum bewirkt ?? keinen Fehler? Ich kenne die Nummer mit .*? für das non-greedy Verhalten, obwohl ich immer die andere Wariante nehme, aber was bedeutet "??" ? Hab das Verhalten ausprobiert, es scheint nur dann zu matchen, wenn der ausdruck danach gematcht wird. Ansonsten ist das Zeichen nicht im Match drinn, und wird auch sonst gänzlich bei der Prüfung ignoriert. Im Tutorial stand nichts dazu. Sollte ich das ?? kennen?
Hi,
Auf der msdn Seite zu den Regular Expression Language Elements steht, dass "??" das Lazy-Analogon zu "?" ist.
??
Matches the previous element zero or one time, but as few times as possible.
The ? quantifier matches the preceding element zero or one time. It is equivalent to {0,1}. ? is a greedy quantifier whose lazy equivalent is ??.
beste Grüße
zommi