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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема регистра, замена в строке 
:(
    Опции темы
evya
Дата 23.9.2010, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Почему то не могу поменять:

Имею строку

Лена красива женщина пОШла домой

$poisk="пошла"
$poisk2="потопола"

$test=~s/$poisk/$poisk2/gi;


почему то не меняет изза регистра пОШла, хотя индефикатор i имеется
PM MAIL   Вверх
vadiml
Дата 24.9.2010, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если не указать какая кодировка, то от модификатора /i есть прок только для латинских букв.

Поэтому если у Вас не utf8, то лучше не связываться с разными кодировками, а перед проверкой привести у одному регистру
$test = 'Лена красива женщина пОШла домой';
$test =~ tr/АБВГДЕЁ/абвгдеё/ и т.д. весь алфавит
PM MAIL Jabber   Вверх
admsasha
Дата 24.9.2010, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



добавь
use locale;
PM MAIL WWW ICQ Jabber   Вверх
evya
Дата 24.9.2010, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



use locale; 
что нам даст???
PM MAIL   Вверх
admsasha
Дата 24.9.2010, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(evya @ 24.9.2010,  21:48)
use locale; 
что нам даст???

Даст использование текущей локали. Не работает ?
PM MAIL WWW ICQ Jabber   Вверх
evya
Дата 24.9.2010, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



нет не помогает решить задачу

причем mysql ищет нормально внезависимости от регистра
латинские символы хорошо проглатывает, а русские вообще не помогает


$test=~s/$poisk/$poisk2/gi;

PM MAIL   Вверх
admsasha
Дата 24.9.2010, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



какая OS, какая локаль, в какой кодировке файл и текст в нем ?

Это сообщение отредактировал(а) admsasha - 24.9.2010, 15:28
PM MAIL WWW ICQ Jabber   Вверх
evya
Дата 24.9.2010, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



сервер UNIX

С сайта приходит через jquery в UTF я его перекодирую в 
from_to ($poisk, 'UTF-8', 'CP1251');

из mysql данные то же идут в ср1251

потом мне нужно подсветить искомое слово и вывести все данные

в этом и загвозка изза регистра слова поиск подстановка не работает


PM MAIL   Вверх
admsasha
Дата 24.9.2010, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



прям unix ??

Серверная локаль какая ?

Добавлено @ 15:45
впрочем, скорее всего будет тогда так

Код

use locale;
use POSIX qw(locale_h);
setlocale(LC_ALL,"ru_RU.cp1251");


Это сообщение отредактировал(а) admsasha - 24.9.2010, 15:47
PM MAIL WWW ICQ Jabber   Вверх
evya
Дата 24.9.2010, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



прям unix
Серверная локаль -  не пойму


Код

use locale;
use POSIX qw(locale_h);
setlocale(LC_ALL,"ru_RU.cp1251");


то же не помогает


ты думаешь в разных кодировках сравнивается???
так вроде все в одной кодировке.

-i вообще для кирилицы работает???

$test=~s/$poisk/$poisk2/gi;


PM MAIL   Вверх
admsasha
Дата 24.9.2010, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(evya @  24.9.2010,  23:13 Найти цитируемый пост)
прям unix

Странно работать в unix с cp1251 smile

Цитата(evya @  24.9.2010,  23:13 Найти цитируемый пост)
-i вообще для кирилицы работает???

Естественно работает, только нужно правильно выстроить понимание кодировки для программы.

Цитата(evya @  24.9.2010,  23:13 Найти цитируемый пост)
ты думаешь в разных кодировках сравнивается???

Не сравнения в разных кодировках, а скрипт живет в другой кодировке, поэтому не может понять, какое соответствие регистров у данной. Как это я понимаю.

Цитата(evya @  24.9.2010,  23:13 Найти цитируемый пост)
так вроде все в одной кодировке.

текст - может быть.


P.S. Специально проверил на своем компьютере, установка "use locale" помогла решить проблему.

набери простой пример,  будет работать ?
Код

#!/usr/bin/perl
use locale;

$test="Лена красива женщина пОШла домой";
$poisk="пошла";
$poisk2="потопола";

$test=~s/$poisk/$poisk2/gi;

print $test;


у меня вывод
Код

Лена красива женщина потопола домой




PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




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


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

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