|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Alexander P. Russkih 2:468/75 05 Apr 2004 20:36:52 To : All Subject : Re: почему? --------------------------------------------------------------------------------
Igorr V Syurtukov wrote:
> Регэксповый вопрос: хочу в строке (на самом деле в ней имя мп3-шки) заменить
> кучу слов на их нижнерегистровый вариант. Делал так (старый вариант):
>
> $mp3=~s/( To | The | A |...| An )/\L$1/ig;
>
> ...ну не заменяет второе вхождение, если идет, к примеру "... In The ..."! До
> первого отрабатывает и все тут! Почти точно помню, что раньше делало все
> нормально, а теперь упс! Бился головой об стенку, все перепробовал - не
> судьба. Извратился
> так: === @array=("From","At","To","Of","On","The","For","An"); foreach
> $tmp(@array){$mp3=~s/(?<!\-)(\s$tmp\s)/\L$1/ig;}; === смысл работы - все эти
> At, To и т.д., если они не первым словом после "-" стоят и окружены пробелами
> опустить в нижний регистр, невзирая на их текущий регистр (ведь может быть и
> From и FROM и FROm). Почему не работает верхняя замена в глобале?
лови... где мой боченок пива? :-)
===
use locale;
use POSIX qw(locale_h);
setlocale(LC_CTYPE, 'ru_RU.KOI8-R');
my $mp3 = "From The Cool On Dark Night On Me"; # и чего это я тут ляпнул? но
для примера сойдет :-)
my @word_to_lc=("From","At","To","Of","On","The","For","An");
my $lcregexp = join('|',@word_to_lc);
print "$lcregexp\n";
$mp3 =~ s/([^\n]$lcregexp)/lc $1/ge;
print "$mp3\n";
===
если в этом примере lc $1 заменить на \L$1 то получим следующее ругательство
от perl'а: Can't locate object method "L" via package "The" (perhaps you
forgot to load "The"?) at ./regexp_lc.pl line 13.
--
XMMS:
--- Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.5) Gecko/20031007
* Origin: Registered Linux User #341226 (2:468/75@fidonet)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/10980ce3c1947.html, оценка из 5, голосов 10
|