|
|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/1018b89a5090.html, оценка из 5, голосов 10
|