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


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Sergey                               2:5020/400     23 Dec 2006  14:37:10
 To : All
 Subject : Re: Hет логики в re
 -------------------------------------------------------------------------------- 
 
 Привет.
 
  JL> Это поведение вполне логично. Оно описано в perldoc perlop, раздел
  JL> "Repeated patterns matching zero-length substring":
 
  Ох, а я и не знал, что у переменных есть еще и состояние "предыд. поиск имел
 0-ю длину совпадения". Кругом сплошные тонкости.
 
  А как объяснить такое чудо?
 
 $_=''; print 'OK' if /()\1/;
 
  Выдает OK.
 
 $_=''; print 'OK' if /()?\1/;
 
  Hе найдено! В чем отличие от случая 1? Ведь вначале ? соответствует 1 повтору
 и возврата в переборе быть не должно, а выходит, что он вроде бы есть.. Если
 убрать \1, то совпадение есть.
  Это выглядит еще более странным на фоне того, что
 
 $_=''; print 'OK' if /()?()/;
 
  тоже совпадает.
 
 $_=''; print 'OK' if /((?{print 'ABC '}))?\1/;
 
  Опа, опять найдено! И еще выдает ABC.
  Я, конечно, понимаю, что вставленный код всегда совпадает, но ведь и так и
 сяк там пустота должна совпасть...
 
  И еще такое замечание: если переменная $1 не существует (перебор обошел ветку
 с первой парой скобок стороной), то \1 внутри шаблона ничему не соответствует,
 в том числе пустому фрагменту, а $1, вставленная как (??{$1}), соответствует
 пустому фрагменту, хотя Перл ругается, что $1 не определена. Здесь тоже
 непонятная логика.
  Проверял в ActivePerl 5.8.0.805 под Win32.
 
 Сергей
 
 --- ifmail v.2.15dev5.3
  * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)
 
 

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

 Тема:    Автор:    Дата:  
 Re: Hет логики в re   John Lepikhin   22 Dec 2006 22:29:27 
 Re: Hет логики в re   Sergey   23 Dec 2006 14:37:10 
 Re: Hет логики в re   Orlovsky Alexander   25 Dec 2006 12:58:48 
Архивное /ru.perl/1667923e0ad2e.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional