|
|
|
Junior Member
      
участник
Last Login: 21.06.2006 9:17
Сообщ.: 19,
Visits: 202
|
|
Имеется строка, нужно выделить в ней слово, причём выделить если оно найдено и без чувствительности регистра букв (русские символы!). preg_replace("/$words/i", "<b>\\0</b>", $string) чувствительна к регистру символов кирилицы :(
|
|
|
|
|
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.
|
|
|
|
|
Junior Member
      
участник
Last Login: 21.06.2006 9:17
Сообщ.: 19,
Visits: 202
|
|
| Спасибо Bazile! Пожалуй твой совет будет самым оптимальным в данном случае.. Только вот всю кирилицу и комбинации в массивы заносить и борабатывать не сильно ли на загрузке скажется...
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Ты так говоришь, как будто тебе предлагают весь орфографический словарь в программу забить. В русском алфавите 33 буквы, значит тебе надо создать хеш из 66 пар, вида "а" => "[aA]", "A" => "[aA]", "б" => "[бБ]", "Б" => "[бБ]" и так далее. Я сильно сомневаюсь что его использование с функцией strtr скажется на скорости твоего скрипта.
|
|
|
|
|
Supreme 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);
прекрасно справлеятся при любом регистре
|
|
|
|
|
Supreme Being
      
участник
Last Login: 14.02.2007 9:51
Сообщ.: 149,
Visits: 1 450
|
|
bazile (16.06.2006) Ты так говоришь, как будто тебе предлагают весь орфографический словарь в программу забить. В русском алфавите 33 буквы, значит тебе надо создать хеш из 66 пар, вида "а" => "[aA]", "A" => "[aA]", "б" => "[бБ]", "Б" => "[бБ]" и так далее. Я сильно сомневаюсь что его использование с функцией strtr скажется на скорости твоего скрипта.
Нуя право не знаю зачем так долбать голову да вcпаминать весь алфавит можноведь указать диапазон [А-Я]
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| 2 pehser Windows не различает большие и маленькие в именах файлов, но это не имеет никакого отношения к сравнению строк. Здесь дело именно в разнице региональных наcтроек разных плафтформ. Unix не знает какие буквы в русском являются строчными, а какие прописными отсюда и проблема.Твой пример работает, потому что там нет русских букв.
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
pehser (19.06.2006) Нуя право не знаю зачем так долбать голову да вcпаминать весь алфавит можноведь указать диапазон [А-Я] Внимательно, прочитай мой совет, почему я именно так советую.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 14.02.2007 9:51
Сообщ.: 149,
Visits: 1 450
|
|
вобщем без изврата не обойтись
можно сделать так
function low_str($str)
{
return strtr($str, "ІЇЄЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁQWERTYUIOPASDFGHJKLZXCVBNM", "іїєйцукенгшщзхъфывапролджэячсмитьбюёqwertyuiopasdfghjklzxcvbnm");
}
Сдесь с учетом Украинского
|
|
| |