Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Regex-Exception: Geschachtelter Quantifizierer ?
ratalert
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

Regex-Exception: Geschachtelter Quantifizierer ?

beantworten | zitieren | melden

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:
Zitat
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.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
ratalert
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

beantworten | zitieren | melden

achso,alles klar. danke
private Nachricht | Beiträge des Benutzers
ANSI_code
myCSharp.de - Member

Avatar #avatar-2839.jpg


Dabei seit:
Beiträge: 467
Herkunft: Bayern

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
zommi
myCSharp.de - Member

Avatar #avatar-2617.png


Dabei seit:
Beiträge: 1.361
Herkunft: Berlin

beantworten | zitieren | melden

Hi,

Auf der msdn Seite zu den Regular Expression Language Elements steht, dass "??" das Lazy-Analogon zu "?" ist.
Zitat von msdn
??
Matches the previous element zero or one time, but as few times as possible.
Zitat von msdn
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
private Nachricht | Beiträge des Benutzers