Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: regexp?   Anton Petrusevich   09 Aug 2000 10:10:04 
 Re: regexp?   Ivan Frolcov   09 Aug 2000 18:46:55 
 Re: regexp?   Paul Kulchenko   09 Aug 2000 18:57:53 
 Re: regexp?   Serge Shikov   09 Aug 2000 20:19:42 
 Re: regexp?   Dmitriy Goldobin   09 Aug 2000 22:35:17 
 Re: regexp?   Artem Chuprina   14 Aug 2000 12:55:02 
Архивное /ru.perl/35555ea1b1ba.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional