Регулярные выражения. Жадные и ленивые квантификаторы

Регулярные выражения. Жадные и ленивые квантификаторы

От автора: приветствую вас, друзья. В этой статье мы поговорим о свойствах квантификаторов в регулярных выражениях, конкретнее — о жадных и ленивых или нежадных квантификаторах. Начнем?

Итак, что же это за свойства такие — жадность и нежадность — и как они отражаются на работе квантификаторов. Как мы помним из предыдущей статьи, квантификаторы определяют количество повторений символа или группы символов. Чаще всего в работе используются квантификаторы + и *, которые определяют повторение символа от 1 до бесконечности и от 0 до бесконечности соответственно.

При этом все квантификаторы в регулярных выражениях по умолчанию являются жадными, то есть они будут стараться захватить как можно большее количество повторений символов. Яркий пример жадности квантификаторов можно наблюдать при поиске ссылок в строке:

Что мы видим? Регулярное выражение вместо поиска двух ссылок нашло только одно совпадение, которое включает обе ссылки и весь текст между ними, то есть было захвачено много лишнего.

Произошло это как раз по причине жадности квантификаторов. В этой части шаблона — .+ — мы указали, что между открывающим и закрывающим тегами ссылки может находиться любой символ. В результате эта часть регулярки честно захватила все, начиная от знака больше первой ссылки и заканчивая знаком меньше второй ссылки. На скриншоте ниже эта часть выделена фиолетовым цветом:

Как же решить эту задачу? Достаточно просто. Мы должны изменить свойство жадности квантификатора, сделав его нежадным или ленивым. Делается это добавлением вопросительного знака после квантификатора. Тем самым квантификатор становится ленивым и будет стараться захватить как можно меньшее количество символов. Ну что же, попробуем сделать квантификатор нежадным:

Вот теперь регулярка сработала так, как мы и задумывали. Не забывайте об этом свойстве квантификаторов и ваши регулярные выражения будут работать корректно. Также стоит отметить, что в PHP нам доступен модификатор шаблона U, который делает квантификаторы по умолчанию нежадными.

На этом у меня сегодня все. Больше о регулярных выражениях вы можете узнать из нашего курса по регулярным выражениям. Удачи!

Метки:

Похожие статьи:

Комментарии Вконтакте: