|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Ivan Frolcov 2:5020/400 08 Aug 2000 11:28:40 To : All Subject : Re: regexp? -------------------------------------------------------------------------------- > Столкнулся тут с непоняткой одной. Ежели кто растолкует, буду очень > рад. Просто завидно - сколько же тебя ждет радостей в жизни! :-) > Итак. > > casus:casus$ cat a > F11= > F12 > F1 > F13 > > casus:casus$ perl -nle 'print if /F\d{1,2}[^=]/' a > F11= > F12 > F13 > > Вроде как квантификатор {1,2} должен работать по принципу максимальной > жадности и съедать все цифирьки (можно поставить ``+'', ничего не > изменится), далее проверяем на наличие отсутствия сивола ``=''. Чего ради > всплывает строчка ``F11=''? Hе понятно. Куда делась ``F1''? А ты прочитай, что написал: F, за которым следует одна или две цифры, после которой следует символ, отличный от =. F11= вполне под это походит - F, за ним цифра, за ней еще одна цифра, а не =. Backtracking, короче. Попробуй для развлечения /F(?>\d{1,2})[^=]/ Куда делась F1? А ведь за 1 не следует символ, отличный от =, правда? Попробуй поставь в конце строки пробел и лицезрей. Или /F\d{1,2}([^=]|$) > продолжим: > casus:casus$ perl -nle 'print if /F\d{1,2}(?!=)/' a > F11= > F12 > F1 > F13 > > Hифига не понимаю. То же самое. Greedy не только легко ускакивают вперед, насколько можно, но и не менее легко откатываются обратно. --- ifmail v.2.15dev5 * Origin: Moscow State University (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/54867c6b91fa.html, оценка из 5, голосов 10
|