|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 05 Apr 2004 17:57:29 To : Igorr V.Syurtukov Subject : Re: почему? -------------------------------------------------------------------------------- Igorr V.Syurtukov -> All @ Sat, 03 Apr 2004 18:19:20 +0400: IV> Регэксповый вопрос: хочу в строке (на самом деле в ней имя IV> мп3-шки) заменить кучу слов на их нижнерегистровый вариант. Делал IV> так (старый вариант): IV> $mp3=~s/( To | The | A |...| An )/\L$1/ig; IV> ...ну не заменяет второе вхождение, если идет, к примеру "... In IV> The ..."! До первого отрабатывает и все тут! Почти точно помню, что IV> раньше делало все нормально, а теперь упс! Бился головой об стенку, IV> все перепробовал - не судьба. Извратился так: IV> === IV> @array=("From","At","To","Of","On","The","For","An"); IV> foreach $tmp(@array){$mp3=~s/(?<!\-)(\s$tmp\s)/\L$1/ig;}; IV> === IV> смысл работы - все эти At, To и т.д., если они не первым словом IV> после "-" стоят и окружены пробелами опустить в нижний регистр, IV> невзирая на их текущий регистр (ведь может быть и From и FROM и IV> FROm). Почему не работает верхняя замена в глобале? По идее, оно у тебя работать должно через одно слово. А лечится это посредством нахождения в perldoc perlre подстроки "\b". Осознание причин оставляется в качестве домашнего упражнения. -- Artem Chuprina RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/122.256, ICQ: 13038757 --- ifmail v.2.15dev5.3 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/256065d0db522.html, оценка из 5, голосов 10
|