Регулярные выражения (Perl)

abramov2008

вопрос следующий:
вот есть модификатор /i - поиск без учета регистра, но он не работает с русским языком.
например:


$string = "Кошка КОШКА";
$context = "кош";
$string =~ s/($context)/<b>$1<\/b>/ig; # это не сработает (а нужно выделить контекст в строке)


что делать?

Ivan8209

Выставить locale?
---
...Я работаю антинаучным аферистом...

abramov2008

поподробней плз

sergey_m

perllocale(1)

Ivan8209

echo фффФФФ | perl -ne 'use locale; s/ффф/ротор/gi; print'
---
...Я работаю антинаучным аферистом...

abramov2008

гхм, нифига не понимаю.
что надо кокретно сделать, чтобы заработало? неужели никто не сталкивался с такой проблемой?

Ivan8209

В приведённом виде --- работает.
Нужно выставить locale, здесь (у меня) это ru_RU.KOI8-R.
---
...Я работаю антинаучным аферистом...

abramov2008

не получается, делаю так:


use POSIX qw(locale_h);
my $old_locale = setlocale(LC_CTYPE);
setlocale(LC_CTYPE, "ru_RU.KOI8-R");
######regexp working code########
setlocale(LC_CTYPE, $old_locale);


в чем может быть проблема?

dus1970

Не понимаю, как можно не понять, если есть пример, как работает?
> setlocale(LC_CTYPE, "ru_RU.KOI8-R");
Не надо извращаться -- LC_ALL.

abramov2008

есть пример? покажи
что LC_CTYPE, что LC_ALL - все равно не работает

dus1970

В чём дело-то?

abramov2008

у меня не работало так
НО! танцы с бубном помогли (по другому и не скажешь все ок!
всем спасибо за советы!
Оставить комментарий
Имя или ник:
Комментарий: