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


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : vilfred                              2:5020/400     29 Aug 2001  14:28:18
 To : Timur V. Irmatov
 Subject : Re: не понял как работает regex :(
 -------------------------------------------------------------------------------- 
 
 Привет!
 TV> Движок (regexp engine) при сопоставлении второй
 TV> (\w+) видит пробел и
 TV> возвращется к первой скобке и сопоставляет
 TV> networ, для второй остается k,
 TV> матчит пробел, но дальше в строке идет w, а не k.
 TV> Engine снова возвращается к первой (\w+) ... Этот
 TV> процесс идет до тех пор,
 TV> пока для первой скобки не будет сопоставлен net,
 TV> соответственно для второй -
 TV> work, третьей - shop...
 
 Hе, погоди, а всетки
 
 \2(w+) - '' => 'workshop' не подошло, хотя почему, ведь \2 пуст и пуст 
 \2, т.е. должно совпасть и вообще несовпадаемое. Первый шаг по 
 неизвестным причинам дает false, хотя почему не должен давать true...
 
 \2(\w+) - 'k' => 'workshop' false потому что 
 \1\2 = 'networ''k' != workshop
 
 \2(\w+) - 'rk' => 'workshop' false потому что 
 \1\2 = 'netwo''rk' != workshop
 
 \2(\w+) - 'ork' => 'workshop' false потому что 
 \1\2 = 'netw''ork' != workshop
 
 \2(\w+) - 'work' => 'workshop' false потому что 
 \1\2 = 'net''work' == workshop - почему?
 
 \1\2 = 'net''work' == workworkshop тогда просто совпадает \1\2 
 = 'net''work' == workshop 
 
 ведь \3 возможно содержит shop, а \2 стопудово содержит work на 
 четвертом шаге. Т.е. regex'у покласть на то, что происхдит с переменной 
 \3 с ней могет ваабще ниче не происходит, она просто подходит под шаблон
 
 \2(\w+) - 'kshop' => 'workshop' false потому что 
 перед 'kshop' идет 'wor' а не пробел.
 
 \2(\w+) - 'rkshop' => 'workshop' false потому что 
 перед 'rkshop' идет 'wo' а не пробел.
 
 \2(\w+) - 'orkshop' => 'workshop' false потому что 
 перед 'orkshop' идет 'w' а не пробел.
 
 \2(\w+) - 'workshop' => 'workshop' true потому что перед 'workshop' 
 идет ' ' - пробел.
 
 Regex ведь сравнивает комбинацию переменных \2(\w+) со всей строкой. но 
 глючно он как-то. Вместе с маленьким правилом отката назад одновременно 
 действует большое правило сравнения со всей строкой с целью выискивания 
 из неё конкретной подстроки.
 
 и получается 
 
 $1 = 'net'
 $2 = 'work'
 $3 = 'shop'
 
 Че-то тут не так...
 
 \2 содержит k, а после пробела идет w. 
 Бах несовпаение, \2 отъедает rk, пробел, опять w, млах, опять отъели 
 \2=ork, снова несовпадение, отъели еще, work, совпадение
 
 \2(\w+) - 'work''shop' совпадает с подстрокой строки network workshop 
 Итого, 
 $1 -net, 
 $2 - 'work', 
 $3 - 'shop'
 
 так вот почему откат происходит, йопересете, потому что нсовпадение. 
 Бардак. 
 
 Смущает до сих пор другое, ведь третьим-то стоит (\w+) - ЖАДHЫЙ, он 
 обязан сожрать все слово workshop. Хотя он и сожрет, ведь сопоставление 
 идет с сожранным workshop слова work. Как-то через задницу или я еще че-
 то недогнал.
 -- 
 Отправлено через сервер Talk.Ru - http://www.talk.ru
 --- ifmail v.2.15dev5
  * Origin: Talk.ru (2:5020/400)
 
 

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

 Тема:    Автор:    Дата:  
 не понял как работает regex :(   vilfred   29 Aug 2001 13:49:35 
 Re: не понял как работает regex :(   Timur V. Irmatov   29 Aug 2001 14:18:04 
 Re: не понял как работает regex :(   vilfred   29 Aug 2001 14:28:18 
 Re: не понял как работает regex :(   vilfred   29 Aug 2001 14:42:37 
 Re: не понял как работает regex :(   Vladimir Podgorny   29 Aug 2001 14:48:42 
 Re: не понял как работает regex :(   Alexander Babanov   29 Aug 2001 11:05:03 
 Re: не понял как работает regex :(   Timur V. Irmatov   29 Aug 2001 14:52:48 
 Re: не понял как работает regex :(   vilfred   29 Aug 2001 16:10:08 
 гы, право с лево перепутал :)   vilfred   29 Aug 2001 16:10:09 
 Re: гы, право с лево перепутал :)   vilfred   29 Aug 2001 17:07:05 
 Re: не понял как работает regex :(   Konstantin Stupnik   31 Aug 2001 15:24:20 
 Re: не понял как работает regex :(   Alexander Babanov   29 Aug 2001 11:03:40 
Архивное /ru.perl/6488e208e58e.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional