|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Konstantin Boyandin 2:5020/400 26 Jul 2007 09:00:43 To : Dmitry Kolvakh Subject : регексп --------------------------------------------------------------------------------
Приветствую, Dmitry Kolvakh!
DK>>> Есть строка вроде "...xxx...xxx...xxx...xxx...yyy...".
DK>>> Количество xxx-ов произвольно. Hадо выделить фрагмент между
DK>>> последним xxx и yyy. "xxx(.*?)yyy" выделяет между первым xxx и
DK>>> yyy, т.е. отмена жадности регекспа через ? не работает назад. Как
DK>>> решить?
KB>> Посредством "negative lookahead". С ходу:
KB>> $var =~ /xxx((?!.*?xxx.*).*?)yyy/;
DK> Угу, про эту конструкцию я что-то забыл (давно не эхотажил :( )
DK> Hо имхо можно упростить:
DK> $var =~ /xxx((?!xxx).*?)yyy/;
Hу, к lookahead стоит прибегать, только если нет возможности обойтись без
(если я не путаю, это замедляет обработку). Если подумать, то расстановкой
"якорей" (^, $) и снижением "жадности", твою конкретную задачу можно решить и
без lookahead.
DK> Твой вариант на мой взгляд менее изящен, но зато гораздо более очевиден
DK> при чтении - это имхо важнее.
DK> Интересно, а который быстрее работает?
Без lookahead, по моему, должно быть быстрее. Если это не так, то рад, что
ошибаюсь.
Всего наилучшего,
Константин
Фантастическая реальность: http://boyandin.ru
--- ifmail v.2.15dev5.3
* Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/1667931ef094f.html, оценка из 5, голосов 10
|