Как сопоставить русское слово с помощью preg_replace в PHP?

Как мне найти соответствие русскому слову в строке (также на русском языке) в PHP?

Например, что-то вроде этого:

$pattern = '/слово/';
preg_replace($pattern, $replacement, $string_in_russian)

Я пробовал utf8_encode и htmlentities с флагом UTF-8 для $ pattern, но это не сработало. Следует ли мне также кодировать $ string_in_russian?

Обновление: Предложение для флага / u не сработало, поэтому я помещаю код, для которого он мне нужен. Это из плагина глоссария для Wordpress (мой сайт правильно настроен для использования русского языка, и он работает, но не в этом случае). Итак, вот код

$glossary_title = $glossary_item->post_title;
$glossary_search = '/\b'.$glossary_title.'s*?\b(?=([^"]\*"[^"]\*")\*[^"]*$)/iu';
$glossary_replace = '<a'.$timestamp.'>$0</a'.$timestamp.'>';
$content_temp = preg_replace($glossary_search, $glossary_replace, $content, 1);

Когда я делаю быстрое эхо в комментарии HTML, это строка, которую я получаю для шаблона
/ \ bсловоs *? \ B (? = ([^ "] *" [^ " ] ") [^"] * $) / iu

И хорошо, это все еще не работает. Я подумал, что, может быть, это была буква «s» (этот уровень регулярного выражения мне немного не по силам, но я предполагаю, что он существует для возможных множественных чисел), но его удаление не помогло.

Обновление №2: Хорошо, поэтому я решил провести полный тест «с чистого листа» - простой файл PHP с некоторыми строками $ content на английском и русском языках и целевыми словами для замены. Вот код

$content_en = 'Nulla volutpat pretium nunc, ac feugiat neque lobortis vitae. In eu sapien sit amet eros tincidunt viverra. Proin congue hendrerit felis, et consequat neque ultrices lobortis. Proin luctus bibendum libero et molestie. Sed tristique lacus a urna semper eget feugiat lacus varius. Donec vel sodales diam. Proin fringilla laoreet purus, a facilisis nisi porttitor vel. Nullam ac justo ac elit laoreet ullamcorper vel a magna. Suspendisse in arcu sapien.';
$find_en = 'proin';
$replace_with_en = 'REPLACEMENT';
$glossary_search = '/\b'.$find_en.'s*?\b(?=([^"]*"[^"]*")*[^"]*$)/iu';
$content_en_replaced = preg_replace($glossary_search, $replace_with_en, $content_en);

$content_ru = 'Lorem Ipsum используют потому, что тот обеспечивает более или менее стандартное заполнение шаблона, а также реальное распределение букв и пробелов в абзацах, которое не получается при простой дубликации "Здесь ваш текст.. Здесь ваш текст.. Здесь ваш текст.." Многие программы электронной вёрстки и редакторы HTML используют Lorem Ipsum в качестве текста по умолчанию.';
$find_ru = 'ваш';
$replace_with_ru = 'Многие';
$glossary_search = '/\b'.$find_ru.'s*?\b(?=([^"]*"[^"]*")*[^"]*$)/iu';
$content_ru_replaced = preg_replace($glossary_search, $replace_with_ru, $content_ru);

А вот скриншот результата http://www.flickr.com/photos/iliadraznin/5372578707/

Как вы можете видеть, в английском тексте было заменено целевое слово, в то время как русский нет, и код идентичен, и я использую флаг / u. Файл также имеет кодировку UTF-8. Какие-либо предложения? (и снова я попытался удалить "s", по-прежнему ничего)

7
задан Lev Khomich 28 April 2012 в 22:02
поделиться