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


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : vilfred                              2:5020/400     24 Apr 2002  02:16:00
 To : Vilfred
 Subject : в догонку
 -------------------------------------------------------------------------------- 
 
 в попытках осознать, как работает эта штука, написал еще один регексп: 
 
 $u=~s%((pre|xml).*?/\2)|([\n\cM\cJ]+)%!m&$1&g?$1?$1:'<br>':'<br>'%gessi;
 
 но сначала объясню, как до него пришел. 
 
 Hепонятки операторе или '|' который стоит до ([\n\cM\cJ]+),
 ведь в случае перевода каретки $1 реально существует и условие if?
 then:else в первом регекспе должно так-же сработать(т.е. втупую 
 напечатать перевод каретки), но оно не срабатывает, а вместо этого 
 возвращает ложь и подставляет <br>...
 
 Причем в исходном регекспе 
 $u=~s%((pre|xml).*?/\2)|([\n\cM\cJ]+)%$1?$1:'<br>'%gesi;
 во второй половине замены условие $1, а если подставить $2 вместо $1, 
 ведь в случае перевода каретки (pre|xml).*?/\2) не существует, а значит 
 и не существует переменной $2 и она должна вернуть undef, который 
 спровоцирует false в условии $2?$1:'br' и должно напечататься <br>.
 
 Решил сделать вот что, вместо if?then:else подставил s%m&pre|xmp&g?:%
 gesi,
 т.е. если переменная $_ внутри регекспа будет равна, то m// должно 
 вернуть истину и тогда поставится действительно $1, содержащий пре или 
 хмп, но оно не заработало. Пошел еще дальше, вместо условия then 
 подставил в конструкцию ?$1?$1:'<br>': ожидая, что тут то оно уж 
 даолжно верно сработать... но нифига, все начало работать только при 
 отрицании !m// (что еще более странно )... в результате таких научных 
 тыков получил регексп, который работает!!!(опять таки почему - не 
 понимаю):
 
 $u=~s%((pre|xml).*?/\2)|([\n\cM\cJ]+)%!m&$1&g?$1?$1:'<br>':'<br>'%gessi;
 
 всетки gessi как то рифмуется с lessi лохнесским чудовищем, да и надо 
 бы какннить выпендриться!! :)
 
 Относительно скорости работы этого регекспа не знаю, может и тормозит...
 
 Дима
 -- 
 TEAM [Маньяки]
 Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
 --- ifmail v.2.15dev5
  * Origin: Talk.ru (2:5020/400)
 
 

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

 Тема:    Автор:    Дата:  
 Регекспы: как заменить всё, кроме...   Roman =KRoN= Karshiev   18 Apr 2002 08:03:59 
 Re: Регекспы: как заменить всё, кроме...   Victor Wagner   18 Apr 2002 09:25:51 
 Re: Регекспы: как заменить всё, кроме...   Roman =KRoN= Karshiev   19 Apr 2002 11:28:23 
 Re: Регекспы: как заменить всё, кроме...   vilfred   20 Apr 2002 11:28:20 
 вот тебе решение твоей задачи...   vilfred   24 Apr 2002 01:10:34 
 в догонку   vilfred   24 Apr 2002 02:16:00 
 Re: в догонку   Andrey Sapozhnikov   24 Apr 2002 03:47:49 
 Re: вот тебе решение твоей задачи...   Andrey Sapozhnikov   24 Apr 2002 03:39:39 
 Re: вот тебе решение твоей задачи...   vilfred   24 Apr 2002 04:44:45 
Архивное /ru.perl/6488d9d17114.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional