The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Нерусские буквы в именах файлов и регулярка"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (Perl)
Изначальное сообщение [ Отслеживать ]

"Нерусские буквы в именах файлов и регулярка"  +/
Сообщение от Yuri (??) on 28-Ноя-10, 07:00 
Подскажите новичку! Перешел на Ubuntu недавно. Осваиваю. Появилась задачка. Найти в папке имена файлов с "нерусскими и неанглийскими" буквами. Проблема вылезла в использовании регулярных. Для начала посмотрел locale Вот вывод с экрана:
LANG=ru_RU.UTF-8
LANGUAGE=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=

Потом набросал для начала от противного (хотя в итоге надо найти "ў") :
#!/usr/bin/perl -w
use locale;
use POSIX qw(setlocale LC_ALL LC_CTYPE);
setlocale(LC_CTYPE, "ru_RU.UTF-8");

$teststr = "errorsўтипаopen.old";       # Имя подопытного файла
#                  ^^^^-----------------русские буквы
if ($teststr =~ /([АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя]+)/){
    print "Есть такая буква $1\n";   # Поискал русские буквы и вывел
}

Запуск скрипта perl script.pl находит букву "ў"!  
Запуск скрипта perl -le script.pl вообще не находит русских.

Куда дальше "копать" даже не знаю      :(

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Нерусские буквы в именах файлов и регулярка"  +/
Сообщение от Etch on 28-Ноя-10, 17:05 
#!/usr/bin/perl

use Encode;

$teststr = "errorsўтипаopen.old";       # Имя подопытного файла
$teststr = decode_utf8($teststr);
$r = decode_utf8('([А-Яа-я]+)');

#$teststr = pack 'U0C*', unpack 'C*', $teststr; #альтернативный вариант (без 'use Encode'
#$r = pack 'U0C*', unpack 'C*', '([А-Яа-я]+)'; #и decode_utf()

if ($teststr =~ /$r/){
    print decode_utf8("Есть такая буква: "), $1, ";\n";   # Поискал русские буквы и вывел
}

Запускать: perl -C script.pl

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Нерусские буквы в именах файлов и регулярка"  +/
Сообщение от anonymous (??) on 28-Ноя-10, 23:38 
В начале программы можно добавить
use open IO => ":utf8";
и русские буквы станут себя вести не хуже латинских

Попутно вопрос. "Регулярка" - это не то же, что женские физиологические циклы?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру