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

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

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

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

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

Бесплатный курс по PHP программированию

Освойте курс и создайте динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Получить курс сейчас!

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

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

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

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

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

Бесплатный курс по PHP программированию

Освойте курс и создайте динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Получить курс сейчас!

Хотите изучить регулярные выражения на PHP?

Прямо сейчас посмотрите 12-ти часовой курс по регулярным выражениям на PHP!

Смотреть курс

Метки:

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

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

Комментарии Facebook:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Я не робот.

Spam Protection by WP-SpamFree