LINUX.ORG.RU

[perl] парсинг кирилицы

 


0

1

имеется необходимость распарсить русский текст перловым скриптом по шаблону регекспа. проблема в том что скрипт не парсит кирилицу что имею: имею Gentoo Linux с руссификацией в кодировке UTF-8 вот locale

LANG=ru_RU.UTF.8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=ru_RU.UTF-8
ast@gentoo ~ $ 

что делаю в скрипт прописываю
use utf8;
use locale;
$text=~m/[А-Яа-я]+/
включаю utf8 locale и явно указываю деапазон для парсинга. Что не так?

☆

Удивили кавычки во всех строчках locale, кроме последней. Приду домой, покажу свой locale

ZenitharChampion ★★★★★
()
[13:42:08][aitap@flyingteapot ~]> echo ыыы | perl -ne 'print if /ы/'
ыыы
[14:03:24][aitap@flyingteapot ~]> locale
LANG=ru_RU.UTF-8
LANGUAGE=
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
[14:03:28][aitap@flyingteapot ~]> echo ыыы | perl -Mutf8 -ne 'print if /ы/'
[14:04:06][aitap@flyingteapot ~]> echo ыыы | perl -Mutf8 -e 'binmode STDIN,":utf8"; binmode STDOUT,":utf8"; $_=<>; print if /ыыы/'
ыыы
[14:05:53][aitap@flyingteapot ~]> 
AITap ★★★★★
()
Ответ на: комментарий от mkeee

добавь либо «use open ':locale';», либо открывай «open(FILE, '<:utf8', «filname.txt»);», но в последнем случае будет стого прибито к utf8.

arsi ★★★★★
()
Ответ на: комментарий от mkeee

> open(FILE,«filname.txt»);
open FILE,«<:utf8»,«filename.txt»;

AITap ★★★★★
()
Ответ на: комментарий от arsi

вроже прописал и вродеб всё ок,НО вот в чем фигня. если указать в регекспе \w+ кирилические слова парсятся а мне нужно чтоб была проверка на заглавные буквы соответственно я указываю явный класс символов [А-Яа-я]+ и скрипт молчит при этом

mkeee ☆
() автор топика

есть еще функция

decode_utf8($str);
например, ну и соответственно
encode_utf8($str);

mamba_namba_karamba ★
()
Ответ на: комментарий от cynovg

точно я указываю в open сейчас open(FILE,«<:encoding(UTF-8)»,«filename.txt»); и через \w+ парс происходит но мне надо указать конкретный класс символов [А-Я] если указать скрипт молчит

mkeee ☆
() автор топика
Ответ на: комментарий от mkeee

Удали все эти
use utf8;
use locale;

и просто открой файл, без принудительного «энкодирования». На всякий случай, перепроверь кодировку самого скрипта :)

У меня банальное
use strict;
my $line = «это строка с кириллицей»;
print «ok\n» if $line =~ m!/[а-яА-Я]+!;

выдает ok

cynovg
()
Ответ на: комментарий от cynovg

вроде все работант но вот очередная проблема при указании явного класса парсится только часть слова например вместр сорва ГЛАВНЫЙ на выврл подается только ГЛАВН

mkeee ☆
() автор топика
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.