← Список руководств GUIDE
Разбираемся в разнице между *, +, {n,m} и добавлением ?.

Квантификаторы задают, сколько раз повторяется предыдущий элемент. * — 0 или более раз, + — 1 или более раз, ? — 0 или 1 раз. Точное число записывается как {n}, диапазон — как {n,m}. Например, \d{3} — это ровно три цифры.

По умолчанию квантификаторы жадные (greedy). То есть они стараются захватить как можно больше. Если применить <.*> к <a>b<c>, то захватится всё целиком — от первого < до последнего >.

Если добавить ? после квантификатора, совпадение становится ленивым (lazy). <.*?> захватывает как можно меньше — только <a>. Эта разница решающая, когда нужно по одному извлекать содержимое между тегами или кавычками.

Из-за жадности и лени шаблон часто ведёт себя не так, как ожидалось. Если результат захватывает слишком много, вспомните о ленивых квантификаторах или отрицательных классах символов (например, [^>]).