Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> рег. выражения нечувствительность к регистру!? поиск при помощи рег.выраж. под windows  
V
    Опции темы
burakov
Дата 15.5.2007, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



Добрый день!
Работаю под WIndows XP
Задача ...
найти в файле слово "припев" независимо от регистра букв. Т.е. Может быть и "ПРИПЕВ", и "пРИпЕв".
И затем сделать все буквы в этом слове заглавными.


пишу 
if ($str =~ /припев/i) {$str =~ tr/а-я/А-Я/; $str=~ tr/a-z/A-Z/;})

НЕ ИЩЕТ!!! Т.е. слово "припев" находит, а все остальное типа "пРИпЕв" - не находит.
Возможно ли под windows использовать ключ
"...      i    - не различать строчные и заглавные буквы...     "     




--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
nitr
Дата 15.5.2007, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



burakov
Код

use locale;
...


Добавлено через 1 минуту и 44 секунды
это как раз и включит
Цитата(burakov @  15.5.2007,  09:56 Найти цитируемый пост)
Возможно ли под windows использовать ключ"...      i    - не различать строчные и заглавные буквы...     "    


Добавлено через 4 минуты и 27 секунд
более подробно perldoc locale и др.


--------------------
PM   Вверх
amg
Дата 15.5.2007, 10:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 1
Всего: 50



use locale;
Если это заработает, то проблем не будет. И i будет правильно восприниматься, и не нужно будет никаких tr - просто $str = uc $str;

А если не заработает, то можно так:
Код

$str =~ tr/а-яё/А-ЯЁ/; # Только для Windows
$str=~ tr/a-z/A-Z/;
if ($str =~ /ПРИПЕВ/) { ... }


Добавлено
О! nitr меня опередил!

Это сообщение отредактировал(а) amg - 15.5.2007, 10:37
PM MAIL   Вверх
nitr
Дата 15.5.2007, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



а так вот возможности форума smile
http://forum.vingrad.ru/forum/topic-151257...610/0.html#look

Добавлено через 1 минуту и 48 секунд
amg, да... но в Windows заработает smile я не видел где не заработает, а твой код к сожалению (второй пример) все буквы в словах переведёт в прописные smile (как тут их назвали заглавные smile) )


--------------------
PM   Вверх
Shaggie
Дата 15.5.2007, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: 1
Всего: 72



Я уже что-то похожее писал... надо декодировать строку во внутреннее её представление на перле, тогда всё будет работать:
Код

use Encode qw(encode decode);

$word = decode('cp1251', 'ПриВЕт');
$str = lc($str) if ($str =~ /$word/i);

Если выводишь на виндовую консоль, в конце надо добавить
Код

print encode('cp866', $str);



P.S. просто у меня отчаяно отказывается работать use locale;

Это сообщение отредактировал(а) Shaggie - 15.5.2007, 11:17


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
nitr
Дата 15.5.2007, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



[offtopic]
amg, хе хе ;)
[/offtopic]

Shaggie, я помню этот код (т.е. такой способ smile (молодец) ), человеку (задавшему) тогда надо почитать perldoc Encode , чтобы потом не путаться с кодировками

тогда так (если правильно понять вопрос ;) ):
Код

#!perl -w
use Encode qw(encode decode);

my $str = 'Привет ПриВет приВет ПРИВЕТ';
$str = decode('cp1251', $str);
my $word = decode('cp1251', 'привет');

if ($str =~ s/($word)/uc $1/gei) {
    print "OK\n";
}

print encode('cp866', $str);

подойдет оно, если конечно не сработает этот:
Код

#!perl -w
use locale;

my $str = 'Привет ПриВет приВет ПРИВЕТ';
if ($str =~ s/(привет)/uc $1/gei) {
    print "OK\n";
}

print $str;


Это сообщение отредактировал(а) nitr - 15.5.2007, 10:51


--------------------
PM   Вверх
burakov
Дата 15.5.2007, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



Друзья - огромное спасибо.

Заработало 
use locale;

Добавлено через 2 минуты и 24 секунды
в принципе помечаю вопрос как "решенный".


--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0902 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.