За последние 24 часа нас посетили 16884 программиста и 1271 робот. Сейчас ищут 1380 программистов ...

граница слова и русские буквы

Тема в разделе "Регулярные выражения", создана пользователем antonn, 25 мар 2008.

  1. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    подскажите, что надо подкрутить на хостинге, чтобы \b работал с русскими словами? мне вообще надо определить границу слова (пробел, пунктуационные знаки), английские слова ловит, русские нет:
    preg_replace("/\b(".preg_quote('Вася').")\b/is", $zamena, $text);
    preg_replace("/\b(".preg_quote('Vasia').")\b/is", $zamena, $text);
    на локалхосте оба находят васю и заменяют, в нете работает только англицкий. хостер юниксовый.
    PS лень было вырезать preg_quote :)
     
  2. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Код (Text):
    1. preg_replace("/(\W)(".preg_quote('Вася').")(?=(\W|$))/is", "\\1$zamena", $text);
    а вот так работает, но это ведь не выход...

    add: блин, а еще регистр русских букв не распознается... всмысле регистрозависимый поиск получается :(
     
  3. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Строка не в UTF-8 случаем?
     
  4. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    нет, windows-1251
     
  5. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  6. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    блин, все ее советуют, а на чем она потом отразится? и что пердавать во втором параметре? на хостинге возвращается локаль "С", при любом втором параметре возвращает false. ПХП, кстати, версии 5.1.6
    вообще можно как то получить список доступных локалей?

    Блин, случайно наткнулся..
    Код (Text):
    1. $ress=setlocale(LC_ALL, array('ru_RU.CP1251', 'rus_RUS.1251'));
    любое изменение этой строчки возврщает фалсе... капец...

    ADD2 :)
    сделал LC_CTYPE, какими последствиями это может грозить? ну регекспы начали нормально работать с русскими словечками, а подводые камни есть?
     
  7. Anonymous

    Anonymous Guest

    Код (Text):
    1. gorbunov@ubuntu:~$ locale -a
    2. C
    3. en_AU.utf8
    4. en_BW.utf8
    5. en_CA.utf8
    6. en_DK.utf8
    7. en_GB.utf8
    8. en_HK.utf8
    9. en_IE.utf8
    10. en_IN
    11. en_NZ.utf8
    12. en_PH.utf8
    13. en_SG.utf8
    14. en_US.utf8
    15. en_ZA.utf8
    16. en_ZW.utf8
    17. POSIX
    18. ru_RU.utf8
    19. ru_UA.utf8
     
  8. Anonymous

    Anonymous Guest

    Типы локалей:
    Код (Text):
    1. gorbunov@ubuntu:~$ locale
    2. LANG=ru_RU.UTF-8
    3. LANGUAGE=ru_RU:ru:en_GB:en
    4. LC_CTYPE="ru_RU.UTF-8"
    5. LC_NUMERIC="ru_RU.UTF-8"
    6. LC_TIME="ru_RU.UTF-8"
    7. LC_COLLATE="ru_RU.UTF-8"
    8. LC_MONETARY="ru_RU.UTF-8"
    9. LC_MESSAGES="ru_RU.UTF-8"
    10. LC_PAPER="ru_RU.UTF-8"
    11. LC_NAME="ru_RU.UTF-8"
    12. LC_ADDRESS="ru_RU.UTF-8"
    13. LC_TELEPHONE="ru_RU.UTF-8"
    14. LC_MEASUREMENT="ru_RU.UTF-8"
    15. LC_IDENTIFICATION="ru_RU.UTF-8"
    16. LC_ALL=