Проблема с работой preg_match

mrx100

Новичок
Проблема с работой preg_match

Всем привет. Проблема в следующем. Есть сценарий поиска по текстовому файлу с простым регулярным выражением вида:

if (preg_match("/\b" . $pattern . "\b/i", $text)) {
...
}


где по шаблону $pattern в текущей строке $text текущего тектового файла ищутся соответствующие совпадения, если они есть. Все работает как надо на локальном сервере Apache+PHP 5.0. Но стоит только выложить весь поисковик на сервер провайдера, то при наличии символов \b в выражении искомый текст не находится (а он есть, само собой). Стоит только эти обрамляющие начало и конец шаблона символы убрать - текст начинает обнаруживаться. При этом полностью игнорируется символ i. То есть, стоит мне исправить в шаблоне только одну букву на заглавную - он тут же перестает обнаруживаться в тексте даже если нет символов \b. Тот же эффект, если вместо preg_match использовать eregi - не работает вариант выражения, когда игнорируются различия в регистрах, то есть находится только строгое соответствие по шаблону, включая регистр символов.

Повторяю, что на локальном сервере Apache все работает - не работет у провайдера. В чем тут может быть дело? Спасибо за внимание.
 

Anarki

Новичок
Советы
Если нужно, экранировать спец символы в $pattern,
PHP:
preg_quote($pattern);
Заменить \b на \\b или использовать одинарные кавычки.
Установить локаль(
PHP:
setlocale
), если используется поиск не только в латинице...
 

mrx100

Новичок
Автор оригинала: Anarki
Советы
Если нужно, экранировать спец символы в $pattern,
PHP:
preg_quote($pattern);
Заменить \b на \\b или использовать одинарные кавычки.
Установить локаль(
PHP:
setlocale
), если используется поиск не только в латинице...
Разобрался, что на сайте провайдера не работает именно поиск текста на кириллице (латиница находится, причем с указанными мною выше \b и в двойных кавычках). На локальном сервере работает и то, и то без установки локали. Пробовал вначале файла, где прописан поисковой скрипт ставить setlocale(LC_ALL,'ru_RU') и setlocale(LC_ALL,'rus_RUS') - ничего не изменилось, текст на кириллице все также не обнаруживается. Как правильно для текущего файла php прописать локаль? Поисковик состоит из файла формы и файла выдачи по результатам поиска. Спасибо за внимание.
 

texrdcom

Новичок
Ты напиши полность что ты задаеш в переменной а то угадай что у тебя там !
 

mrx100

Новичок
Автор оригинала: texrdcom
Ты напиши полность что ты задаеш в переменной а то угадай что у тебя там !
Что именно вас интересует? Как я прописал setlocale? Я это указал выше. В том-то, видимо, вся и проблема, что делаю я это неверно. Как сделать это правильно? Спасибо за внимание.
 

Krisha

pain in the neck
mrx100
выясни какие "локали" установлены на сервере провайдера...
 

mrx100

Новичок
Автор оригинала: SiMM
Вы бы для приличия хоть поиском пользовались, или темы на странице хотя бы мельком смотрели.
Позавчерашний вопрос - preg & русские буквы
Уважаемый SiMM, спасибо за дельную ссылку (не всегда удачно можно найти поиском) - проблема в точности такая же, однако, она, к сожалению, не решилась так просто как у автора той темы. Конструкция
PHP:
setlocale (LC_ALL, 'russian');
не решает проблемы - текст на кириллице не находится. При использовании
PHP:
var_dump(setlocale(LC_ALL, 'ru_RU.WINDOWS-1251'))
также выдается bool(false). Если нет пока доступа к командной строке сервера как быть?
 

SiMM

Новичок
> Если нет пока доступа к командной строке сервера как быть?
[m]exec[/m] & etc
Правда, не факт, что из этого что-то выйдет - если нет - пинать админа ;)
 

texrdcom

Новичок
Да пинать админа не надо :)
Ты свяжись с ними и уточни названия локали для нужной тебе кодировки у них на сервере!
Может какието не стандартные!
 

mrx100

Новичок
Автор оригинала: Profic
ru_RU.CP1251
Ура! Сработало! Так значит, все таки, дело было в неверно указанной локали? Спасибо, Profic! :) Дважды спасибо, что не пришлось никого пинать ;) :)
 
Сверху