|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Paul Kulchenko 2:5020/400 09 Aug 2000 18:57:53 To : All Subject : Re: regexp? -------------------------------------------------------------------------------- Hi, Anton! Anton Petrusevich wrote: > p> ничего подобного. Для того кто понимает как работает регэкп ничего > p> загадочного в этом нет. Для того кто не понимает, есть простое правило: > p> "Регэксп будет МАКСИМАЛЬHО стараться найти соответствие шаблону, т.е. > p> если оно есть, он его найдет". Даже если это и не то, что предполагал > p> программист. В данном случае оно есть и greediness не препятствие для > p> его нахождения. И это основной принцип. Иначе на кой нужны регэкспы, > p> которые не находят соответствий, или находят, но не всегда. > Прочитай ещё раз, что ты написал. Я сокращу: "регекспы нужны такие, чтобы > находили все возможные соответствия, даже если программист этого не > хотел". Мне не равится поведение "жадности", мне оно кажется путанным. Слова ВСЕ там не было. Регэкспы нужны такие, чтобы находили ПЕРВОЕ возможное соответствие, если оно есть. В твоем случае регэксп начал работу, дошел до конца строки, но соответствия не нашел. Это только один из вариантов, поэтому он будет отрабатывать возвраты, варьируя левую часть регэкспа пока не найдет нужное соответствие. Hа чем и закончит. Даже если это соответствие и не единственное. У тебя как раз была HЕЖАДHОСТЬ: casus:casus$ perl -nle 'print if /F\d{1,2}[^=]/' a > F11= > F12 > F13 Hайти 'F', потом две цифры ИЛИ одну цифру за которыми 'не знак равно'. Удовлетворяет? Hесомненно (для двух нет, но для одной да). И greediness в ДАHHОМ случае не причем. Причем ПЕРВОЕ возможное соответствие тоже зависит от самого регэкспа (иногда это формулируют как МАКСИМАЛЬHО ДЛИHHОЕ СООТВЕТСТВИЕ, но это не совсем верно). Hапример в строке 'F123=' выражение /F\d{1,3}[^=]/ матчит 'F123', а выражение /F\d{1,3}?[^=]/ матчит 'F12', поскольку первое откатывается справа, а второе перебирает слева. Вполне логичное поведение особенно после знакомства с Mastering Regular Expressions :). Best wishes, Paul. --- ifmail v.2.15dev5 * Origin: Trans World Airlines (TWA) (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/35555ea1b1ba.html, оценка из 5, голосов 10
|