|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Sergey 2:5020/400 21 Dec 2006 17:37:51 To : All Subject : Hет логики в re -------------------------------------------------------------------------------- Привет. Рассмотрим такую программку: $_='a'; s/.??//g; Кто угадает, что останется от строки? По логике, она не должна измениться. Сперва будет найдено пустое место в начале строки, и оно заменится на пустоту. Далее текущая позиция в строке будет увеличена на 1 символ, чтобы избежать зацикливания, т.к. найденный фрагмент был пустым. Второй раз будет найдена и заменена пустота в конце строки. А на самом деле во второй итерации поиска и замены будет найдена буква а и заменена на пустоту! Где логика? Ведь возврат (backtracking) возникает при отсутствии совпадения, а здесь этого отсутствия нет. Кстати, оператор s///g действует по логике - не удаляет а. В общем, ежик в тумане. Я сейчас пишу курс лекций по Perl regex, если у кого есть интересные и негромоздкие примеры их применения, буду рад узнать о них. Как пример, у Фридла есть задача разделения троек цифр в целом числе запятыми. Если что, емейл на сайте www.cronc.com Сергей --- ifmail v.2.15dev5.3 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/1667956598755.html, оценка из 5, голосов 10
|