[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регулярные выражения и русский язык
FiMko
Привет ребята!

Помогите, пожалуйста, разобраться со следующей проблемой.
Есть код вида:
PHP
<?php
    $regexp 
"/\bтекст\b/i";
    echo 
"preg_match: ".preg_match($regexp"текст"$found)."<br/>";
    echo 
"\$found[0]: ".$found[0]."<br/><br/>";
    
    
$regexp "/текст/i";
    echo 
"preg_match: ".preg_match($regexp"текст"$found)."<br/>";
    echo 
"\$found[0]: ".$found[0]."<br/><br/>";

    
$regexp "/\btext\b/i";
    echo 
"preg_match: ".preg_match($regexp"text"$found)."<br/>";
    echo 
"\$found[0]: ".$found[0]."<br/><br/>";

На локалхосте получаю результат:
Цитата
preg_match: 1
$found[0]: текст

preg_match: 1
$found[0]: текст

preg_match: 1
$found[0]: text

На хостинге (питерхост):
Цитата
preg_match: 0
$found[0]:


preg_match: 1
$found[0]: текст

preg_match: 1
$found[0]: text

Кто-нибудь сталкивался с чем-то подобным. Есть какие-нибудь идеи?



Спустя 34 минуты, 17 секунд (26.04.2009 - 00:03) kirik написал(а):
Думаю что проблема в юникоде. Поставь дополнительный модификатор u (.../iu)

Спустя 6 минут, 31 секунда (26.04.2009 - 00:10) FiMko написал(а):
Цитата (kirik @ 25.04.2009 - 21:03)
Думаю что проблема в юникоде. Поставь дополнительный модификатор u (.../iu)

Изменил первый вариант к виду:
PHP
$regexp "/\bтекст\b/ui";

Вот результат на хостинге:
Цитата
preg_match:
$found[0]:

То есть preg_match совсем слетел, не выдает ничего. На локалхосте показано сообщение об ошибке:
Цитата
Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset 3 in Z:\home\phpbb\www\qwe.php on line 3

Вот, соответственно сама строка 3:
PHP
echo "preg_match: ".preg_match($regexp"текст"$found)."<br/>";

Уверен, на хостинге таже ошибка, просто сейчас точно не помню как его (отображение ошибок) включить.

Спустя 1 час, 21 минута, 21 секунда (26.04.2009 - 01:31) kirik написал(а):
Цитата (FiMko @ 25.04.2009 - 16:10)
просто сейчас точно не помню как его (отображение ошибок) включить.

PHP
error_reporting(E_ALL | E_STRICT);

для php => 5

З.Ы. А зачем тебе \b ?

Спустя 9 часов, 12 минут, 5 секунд (26.04.2009 - 10:43) FiMko написал(а):
Цитата (kirik @ 25.04.2009 - 22:31)

PHP
error_reporting(E_ALL E_STRICT);

для php => 5

На питерхосте, как оказалось, php_value error_reporting 2047
Да, при использовании модификатора /u таже самая ошибка, что и на локалхосте
Цитата
Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset 3 in /home/enghelp/www/site4/public_html/qwe/qwe.php on line 3

Цитата (kirik @ 25.04.2009 - 22:31)

З.Ы. А зачем тебе \b ?

Регулярка "sex" зацепит слова:
sex
sexton
sexangle
sextuple

Регулярка "\bsex\b" зацепит слова:
sex
sexton
sexangle
sextuple

Спустя 26 минут, 29 секунд (26.04.2009 - 11:10) kirik написал(а):
FiMko
похоже PCRE не считает набор не латинских букв словом. Тоесть \b не будет выделять слова.

Спустя 10 минут, 38 секунд (26.04.2009 - 11:20) kirik написал(а):
Если стоит русская локаль, то юзай POSIX регулярки:
PHP
echo eregi('\bтекст\b', 'текст', $found);
    echo '<br/>$found[0]: '.$found[0].'<br/><br/>';


По-другому не могу подсказать как сделать...

Спустя 55 минут, 32 секунды (26.04.2009 - 12:16) FiMko написал(а):
Вот так отпустило smile.gif :
PHP
setlocale(LC_ALL"ru_RU.CP1251");

kirik, большое спасибо за поддержку! К сожалению, не нашел где здесь плюсануть можно...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.