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
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.