За последние 24 часа нас посетили 17230 программистов и 1222 робота. Сейчас ищут 1464 программиста ...

preg_match_all и регистр русских букв

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

  1. Gashek

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

    С нами с:
    5 янв 2008
    Сообщения:
    6
    Симпатии:
    0
    Здравствуйте, помогите разобраться с такой проблемой:
    preg_match_all не понимает регистр русских букв, то-есть
    есть например такое выражение: /яя/i
    по логики должно подходить и ЯЯ и яя , но почемуто не работает (подходит только 'яя')

    пример:
    1. Регулярное выражение по-русски - не работет
    2. Регулярное выражение по-английски - работет

    В чем может быть проблема?
     
  2. Ti

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

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
  3. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
  4. Ti

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

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    Elkaz
    PHP и Ti считает что вы накосячили:
    ваша строка - не UTF-8 строка на позиции 2

     
  5. Gashek

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

    С нами с:
    5 янв 2008
    Сообщения:
    6
    Симпатии:
    0
    да строки у меня не юникод.
    но с setlocale почему-то тоже ни чего путного не получилось

    Код (Text):
    1. <?php
    2. $loc = setlocale(LC_ALL, 'ru_RU');
    3. echo $loc;
    4. preg_match_all('/яя/i', 'ЯЯ яя', $matches);
    5. echo '<pre>';
    6. print_r($matches);
    7. echo '</pre>';
    8. ?>
    на windows выдает:
    Код (Text):
    1. Array
    2. (
    3.     [0] => Array
    4.         (
    5.             [0] => ЯЯ
    6.             [1] => яя
    7.         )
    8.  
    9. )
    а на linux
    Код (Text):
    1. ru_RU
    2.  
    3. Array
    4. (
    5.     [0] => Array
    6.         (
    7.             [0] => яя
    8.         )
    9.  
    10. )
     
  6. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    надо что-то типа ru_RU.CP1251 или ru_RU.KOI8-R

    Код (Text):
    1.  
    2. hosting(440hz):~$>uname -a
    3. FreeBSD hosting.440hz.ru 6.1-RELEASE FreeBSD 6.1-RELEASE #0: Sun May  7 04:42:56 UTC 2006     root@opus.cse.buffalo.edu:/usr/obj/usr/src/sys/SMP  i386
    4. hosting(440hz):~$>lsl /usr/share/locale/ | grep ru
    5. drwxr-xr-x    2 root  wheel   512 31 май  2007 ru_RU.CP1251/
    6. drwxr-xr-x    2 root  wheel   512 31 май  2007 ru_RU.CP866/
    7. drwxr-xr-x    2 root  wheel   512 31 май  2007 ru_RU.ISO8859-5/
    8. drwxr-xr-x    2 root  wheel   512 31 май  2007 ru_RU.KOI8-R/
    9. drwxr-xr-x    2 root  wheel   512 31 май  2007 ru_RU.UTF-8/
    для регулярок под UTF есть соответствующий ожификатор
     
  7. Gashek

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

    С нами с:
    5 янв 2008
    Сообщения:
    6
    Симпатии:
    0
    Ti
    440Hz
    Спасибо за помощь.