Использование чередующихся и группирующих конструкций

Первоначально я хотел, чтобы регулярные числа анализировали числа месяцев. Сначала я придумал следующее регулярное выражение:

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

и оно совпадало с любым положительным числом, говоря, что оно совпадает с старшей цифрой числа, т.е.

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

Почему это так? Я думал, что конструкция чередования сделаетRegex выберите левую или правую, имея^ а также& делает это соответствовать всей строке. Чего мне не хватает?

П.С .: У меня сейчас есть рабочее регулярное выражение (которое соответствует числам только от 1 до 12); его:

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

И я не могу понять, почему это так ...

Это код, который я использовал для тестирования:

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");
}

Ответы на вопрос(2)

Ваш ответ на вопрос