Как сделать {n}? и {n} отличаются?

Я пытаюсь понять следующий квантор квантов регулярных выражений (а это просто примерный токен здесь):

a{n}?

Как знак вопроса влияет на соответствие указанного выражения? И как он отличается от следующего?

a{n}

Я бы ожидал, что шаблон aa{1}?a будет соответствовать как aaa, так и aa, например. Если он соответствует aaa, aa соответствует не. Шаблон a(a{1})?a соответствует совпадению, поэтому круглые скобки имеют здесь значение.


Примечание: статья msdn Квантеры в регулярных выражениях для обоих:

Квантор {n} соответствует предыдущему элементу ровно n раз, где n - любое целое число.

Для {n}? он добавляет следующую, не слишком полезную часть:

Это ленивый аналог жадного квантификатора {n} +.

Ответ 1

Nothing. В статье говорится:

Коэффициент {n} сопоставляет предыдущий элемент ровно n раз, где n - любое целое число. {n} - это жадный квантификатор, ленивый эквивалент которого {n}?.

...

Коэффициент {n}? соответствует предыдущему элементу ровно n раз, где n - любое целое число. Это ленивый аналог жадного квантора {n} +.

Обратите внимание, что текст точно такой же. В принципе, добавление ? не изменяет поведение квантификатора. Похоже, что механизм регулярного выражения .NET поддерживает {n}? в качестве альтернативы {n}.


Интересно, что эта статья, похоже, содержит ошибку:

Коэффициент {n,} соответствует предыдущему элементу как минимум n раз, где n - любое целое число. {n,} - это жадный квантификатор, ленивый эквивалент которого {n}?.

Это неправильно. Леневый эквивалент {n,} равен {n,}?, который не совпадает с {n}?.