Laden...

Regex-Exception: Geschachtelter Quantifizierer ?

Erstellt von ratalert vor 14 Jahren Letzter Beitrag vor 14 Jahren 4.026 Views
R
ratalert Themenstarter:in
22 Beiträge seit 2009
vor 14 Jahren
Regex-Exception: Geschachtelter Quantifizierer ?

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.

49.485 Beiträge seit 2005
vor 14 Jahren

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

R
ratalert Themenstarter:in
22 Beiträge seit 2009
vor 14 Jahren

achso,alles klar. danke

467 Beiträge seit 2007
vor 14 Jahren

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?

1.361 Beiträge seit 2007
vor 14 Jahren

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