|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 06 Apr 2004 12:36:47 To : Igorr V.Syurtukov Subject : Re: почему? -------------------------------------------------------------------------------- Igorr V.Syurtukov -> Artem Chuprina @ Mon, 05 Apr 2004 19:00:00 +0400: IV>>> $mp3=~s/( To | The | A |...| An )/\L$1/ig; IV>>> ...ну не заменяет второе вхождение, если идет, к примеру "... In 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). Почему не работает верхняя замена в глобале? AC>> По идее, оно у тебя работать должно через одно слово. А лечится это AC>> посредством нахождения в perldoc perlre подстроки "\b". Осознание AC>> причин оставляется в качестве домашнего упражнения. IV> Вспомнил про \b - граница слова. Я ей никогда не пользовался. И IV> чем хуже вариант с \s - который для меня более прозрачный? Тем, что для того, чтобы отматчилось " To The " в твоем варианте без цикла, между "To" и "The" должно быть как минимум два пробела. Следующий match начинают проверять после конца предыдущего. А кроме того, нужен пробел до и пробел после. В "To The" не отматчится ни "\sTo\s", ни "\sThe\s". IV> Почему IV> надо юзать \b и самое главное - как? (: \bTo\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/256062fcbc58d.html, оценка из 5, голосов 10
|