|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Kostya Altuhov 2:5030/181 05 Dec 2002 22:36:33 To : vilfred Subject : Проблемы с логикой регулярных выражений -------------------------------------------------------------------------------- 02 Dec 02 15:19, you wrote to me: KA> v>> $t=~m/(abra\d+).*?myexp/ для меня загадка... KA>> Потому что регексы/строки обрабатываются слева KA>> направо. Смотрим на строку, ищем KA>> первое совпадение с (abra\d+). Hаходим abra1. KA>> Обрабатываем .*?: начинаем с 0 v> между .* и .*? большая разница, т.е. оно не обрабатывает минимизацию v> слева направо, т.е. не поджимает слева, а только ест справа... баг или v> фича? Между .* и .*? разница только в направлении матчинга: во втором случае мы начинаем с нуля символов и двигаемся в сторону увеличения (до первого совпадения), а в первом случае - наоборот. В любом случае матчинг происходит до первого совпадения, а не до наилучшего совпадения. Т.е., например, в строке 0 aabc 1 паттерн /a.*?c/ заматчит "aabc", а не "abc". Второе совпадение как бы лучше, но оно второе, а поиск прекращается на первом совпадении (при этом строки обрабатываются слева направо). Это такие правила обработки регулярных выражений, т.е. фича. В нашей строке с abra точно такая же ситуация. Kostya --- * Origin: trust no one (2:5030/181) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор Архивное /ru.perl/22663def9cbc.html, оценка из 5, голосов 10
|