Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Регулярные выражения > Регулярка и cp1251


Автор: shamber 31.3.2011, 16:51
Всем здравствуйте.

Возникла следующая проблема.
Скрипт сохранен в файл в кодировке "cp1251". 
в скрипте получаю данные из вне и обрабатываю ее регуляками.

Код

if($data->{mes}=~/ком!(.*)/gi){
    my $mes = $1;
        if($mes=~/(\w+)/){
                        

первая регулярка отрабатывает нормально. Однако вторая уже не работает. Я думаю проблема с кодировкой. Нужно делать encode?

Автор: ming 31.3.2011, 17:18
http://perldoc.perl.org/perllocale.html

Автор: shamber 31.3.2011, 22:36
т.е. предлагается использовать use locale?

Добавлено через 3 минуты и 16 секунд
а почему первый раз срабатывает?

Автор: alezzz 1.4.2011, 10:41
\w не совпало с кирилицей, если без locale то замените \w
Код

if($mes=~/([А-За-з\d]+)/){


можно и \w оставить если не только кирилица

Автор: ming 1.4.2011, 12:25
Цитата

а почему первый раз срабатывает?

потому что \w зависит от локали, а . ("точка") - нет.

Автор: shamber 1.4.2011, 15:20
Тупанул, вообщем, не по детски. Забыл, что там за регулярку написал (

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)