Verwenden von Alternations- und Gruppierungskonstrukten

Ursprünglich wollte ich einen regulären Ausdruck, der die Monatszahlen analysiert. Zuerst habe ich mir folgenden Regex ausgedacht:

^([1-9]{1})|(1[012])$

und es stimmte mit jeder positiven Zahl überein, was besagt, dass es mit der höherwertigen Ziffer der Zahl übereinstimmte, d.h.

1 => 1
2 => 2
...
9 => 9
10=> 1
...
19=> 1
20=> 2
...

Warum ist das so? Ich dachte, dass das Wechselkonstrukt machen wirdRegex wähle entweder die linke oder die rechte, während du hast^ und& Lässt es mit der gesamten Zeichenfolge übereinstimmen. Was vermisse ich?

P.S .: Ich habe jetzt eine Regex (eine, die nur mit Zahlen von 1 bis 12 übereinstimmt); es ist:

^([1-9]{1}|1[012])$

Und ich kann nicht verstehen, warum es so funktioniert ...

Dies ist der Code, den ich zum Testen verwendet habe:

Regex r = new Regex(@"^([1-9]{1})|(1[012])$");//^([1-9]{1}|1[012])$
for (int i = -5; i < 35; i++)
{
    Console.Write(i);
    Console.Write("\t");
    Match m = r.Match(i.ToString());
    if (m.Success)
        Console.WriteLine(m.Groups[0].Value);
    else
        Console.WriteLine("false");
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage