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


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Dmitry S. Rzhavin                    2:5020/400     31 Oct 2000  19:51:23
 To : All
 Subject : Re: ?!
 -------------------------------------------------------------------------------- 
 
 Sly Golovanov wrote:
 
 > 
 > За что я не люблю утро, All,- оно всегда наступает, когда я сплю...
 > 
 > Hичего не понимаю.
 > 
 > Почему кусок кода
 > 
 > $s='<font color=red><font color=green>';
 > $s=~s/<font([^>]*)(red)([^>]*)>//ig;
 > print $s;
 > 
 > выводит
 > 
 > <font color=green>
 > 
 > что есть правильно; а такой кусок кода, который наоборот должен выводить font
 > color=red :
 > 
 > $s='<font color=red><font color=green>';
 > $s=~s/<font([^>]*)(?!red)([^>]*)>//ig;
 > print $s;
 > 
 > выводит пустую строку - то есть, замена заменяет все фонты. почему? как
 > правильно написать "удалить все фонты, кроме тех, внутри которых есть слово
 > 'red'" ?
 > 
 >     Hе пpощаюсь                                            [Стадо Котов]
 >       > SLY <
 
 почему удаляет все - очевидно.
 Просто regex всегда старается _попасть_, и поэтому 1й раз он ложиться
 так:
 regex: <font([^>]*)(?!red)([^>]*)>
 string ^ color=re   ^не red d    >
                     все ок
 
 потом, из-за флага g он продолжает, и успешно удаляет про green, после
 чего
 строка становится пустой, и regex от нее отстает.
 
 а писать надо что-то типа
 s/<\s*font\s+color\s*=\s*(?!red)\w+\s*>//ig;
 так, меня гонят, сам допишешь. Или я завтра допишу
 --- ifmail v.2.15dev5
  * Origin: Rostelecom (2:5020/400)
 
 

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

 Тема:    Автор:    Дата:  
 Re: ?!   Dmitry S. Rzhavin   31 Oct 2000 19:51:23 
Архивное /ru.perl/1018b89a5090.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional