Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Регулярные выражения > Ленивая квантификация


Автор: MakTpaxep 18.5.2011, 15:13
Почему нижеприведённые регэкспы работают по разному?
Код

s/<.+?><\/.+?>//g;
s/<[^>]+><\/[^>]+>//g;

Первый удаляет некоторые строки, а цель всего лишь удалить пустые тэги.

Автор: alezzz 18.5.2011, 15:35
Первое выражение начинает работать от первого "<" и идет дальше пока не найдет "></" и не важно что по ходу будут по отдельности "<" и ">", точка совпадает с любым символом (в зависимости от модификатора). Второе выражение составлено правильно.


Автор: MakTpaxep 18.5.2011, 16:03
Ах вот в чём дело..
Спасибо за ответ - именно такой я и ждал=)

Автор: alezzz 18.5.2011, 16:06
Но если очень хочется ленивой квантификацией сделать, то удалите обратные связи атомарной группировкой
Код

s#(?><.+?>)</.+?>##g;

Автор: MakTpaxep 19.5.2011, 15:34
Круто, спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)