выделение русских слов без учёта регистра символов
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



выделение русских слов без учёта регистра... Expand / Collapse
Автор
Сообщение
15.06.2006 11:53
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 21.06.2006 9:17
Сообщ.: 19, Visits: 202
 Имеется строка, нужно выделить в ней слово, причём выделить если оно найдено и без чувствительности регистра букв (русские символы!).
 
 preg_replace("/$words/i", "<b>\\0</b>", $string) чувствительна к регистру символов кирилицы :(
Сообщ. #898814
15.06.2006 15:05
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Хороший вопрос. На моей локальной машине (windows/apache) замена с учетом регистра срабатывает без проблем, а вот у хостера (unix/apache) модификатор i не работает как ожидается. Очевидно, что это как-то завязано на региональные настройки, но попытки использовать setlocale(LC_ALL, "ru_RU") или setlocale(LC_CTYPE, "Russian_Russia.1251") результата не дали. Поэтому могу предложить только решение через пень-колоду :)

К примеру, у нас есть входная строка "приВет аааа ПРИВЕТ". Выделить мы хотим слово "привет". Вместо выражения preg_replace("/привет/i", ...) пишем preg_replace("/[пП][рР][иИ][вВ][еЕ][тТ]/i", ...), то есть каждую букву явно указываем в обоих регистрах. Автоматически замену русских букв на выражение "[xX]" можно выполнить с помощью функции strtr.
Сообщ. #898868
16.06.2006 9:32
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 21.06.2006 9:17
Сообщ.: 19, Visits: 202
 Спасибо Bazile! Пожалуй твой совет будет самым оптимальным в данном случае.. Только вот всю кирилицу и комбинации в массивы заносить и борабатывать не сильно ли на загрузке скажется...
Сообщ. #898927
16.06.2006 9:41
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Ты так говоришь, как будто тебе предлагают весь орфографический словарь в программу забить. В русском алфавите 33 буквы, значит тебе надо создать хеш из 66 пар, вида "а" => "[aA]", "A" => "[aA]", "б" => "[бБ]", "Б" => "[бБ]" и так далее. Я сильно сомневаюсь что его использование с функцией strtr скажется на скорости твоего скрипта.
Сообщ. #898930
19.06.2006 11:16
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 14.02.2007 9:51
Сообщ.: 149, Visits: 1 450
bazile (15.06.2006)
Хороший вопрос. На моей локальной машине (windows/apache) замена с учетом регистра срабатывает без проблем, а вот у хостера (unix/apache) модификатор i не работает как ожидается. Очевидно, что это как-то завязано на региональные настройки, но попытки использовать setlocale(LC_ALL, "ru_RU") или setlocale(LC_CTYPE, "Russian_Russia.1251") результата не дали. Поэтому могу предложить только решение через пень-колоду :)

Не в приявязках дело а в Windows и Unex
Дело в том что вида большие и маленькие буквы считает как одинаковые, а юнекс считает это разными буквами.
Хотя например у меня на обоих платформах работает такое

$link="'(src)[^=]*=(?:|[\"\'\r\t])".$graf_urls[$i]."([\"\'\r\t]|:?)'i";
$buf=preg_replace($link, $file_g_s, $buf);

прекрасно справлеятся при любом регистре
Сообщ. #899064
19.06.2006 11:29
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 14.02.2007 9:51
Сообщ.: 149, Visits: 1 450
bazile (16.06.2006)
Ты так говоришь, как будто тебе предлагают весь орфографический словарь в программу забить. В русском алфавите 33 буквы, значит тебе надо создать хеш из 66 пар, вида "а" => "[aA]", "A" => "[aA]", "б" => "[бБ]", "Б" => "[бБ]" и так далее. Я сильно сомневаюсь что его использование с функцией strtr скажется на скорости твоего скрипта.

Нуя право не знаю зачем так долбать голову да вcпаминать весь алфавит можноведь указать диапазон [А-Я]
Сообщ. #899067
19.06.2006 11:34
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
2 pehser

Windows не различает большие и маленькие в именах файлов, но это не имеет никакого отношения к сравнению строк. Здесь дело именно в разнице региональных наcтроек разных плафтформ. Unix не знает какие буквы в русском являются строчными, а какие прописными отсюда и проблема.Твой пример работает, потому что там нет русских букв.

Сообщ. #899071
19.06.2006 11:35
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
pehser (19.06.2006)
Нуя право не знаю зачем так долбать голову да вcпаминать весь алфавит можноведь указать диапазон [А-Я]

Внимательно, прочитай мой совет, почему я именно так советую.
Сообщ. #899072
02.08.2006 12:31
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 14.02.2007 9:51
Сообщ.: 149, Visits: 1 450
вобщем без изврата не обойтись
можно сделать так
function low_str($str)
{
return strtr($str, "ІЇЄЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁQWERTYUIOPASDFGHJKLZXCVBNM", "іїєйцукенгшщзхъфывапролджэячсмитьбюёqwertyuiopasdfghjklzxcvbnm");
}
Сдесь с учетом Украинского
Сообщ. #901891