Жадный и нежадный квантификатор или как научиться парсить.

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

Что это? Оказывается можно указать, какое совпадение из строки нужно брать самое маленькое или самое большое. Ну вот пример. Строка.

<p>Тест <a href="">Ссылка</a> и <i>еще</i> текст</p>

Если к этой строке применить регулярное выражение

<.*>

то результат будет не буква p, как этого хотелось бы, а вся строка от первой открывающей скобки до последней

p>Тест <a href="">Ссылка</a> и <i>еще</i> текст</p

Вот это и есть жадность квантификатора. Он захватывает максимально большой кусок подходящий под шаблон. Лишить его жадности очень просто. Для этого необходимо указать знак ? после *

<.*?>

Это регулярное выражение заставит получить ту самую букву p. Здесь квантификатор становится совсем не жадным и берет самый маленький кусок подходящий к паттерну. Один символ, а совсем другой подход к шаблону.

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

One Comment

Add a Comment

Ваш e-mail не будет опубликован.