preg_replace + UTF-8 не работает на одном сервере, но работает на другом

echo preg_match("/\b(בדיקה|מילה)\b/iu", "זוהי בדיקה"); 

По какой-то причине этот код возвращает 1 на нескольких серверах, на которых я тестировал, но 0 на одном конкретном сервере.

PCRE скомпилирован с поддержкой UTF-8 и поддержкой свойств Unicode. В чем может быть проблема?

Related of "preg_replace + UTF-8 не работает на одном сервере, но работает на другом"

Может быть разница между версиями PCRE, которые использует PHP.

Версия PHP и PCRE: http://php.net/pcre.installation

Вы должны использовать 8.10+ (PHP 5.3.4+)

Версия 8.10 25 июня 2010 года:

  1. Добавлен PCRE_UCP для создания \ b, \ d, \ s, \ w, а некоторые классы символов POSIX используют свойства Unicode. (* UCP) в начале шаблона можно использовать для установки этой опции. Модифицированный pcretest для добавления / W для проверки этого объекта. Добавлен REG_UCP, чтобы сделать его доступным через интерфейс POSIX.

Изменить: просто выполнили некоторые тесты, и он дает 1 на PHP 5.3.10 и 0 на PHP 5.3.2 и PHP 5.3.3.

Это может зависеть от версии PCRE lib. Чтобы сделать вещи более нормальными, попробуйте использовать «UCP verb»: preg_match('/(*UCP)\b(בדיקה|מילה)\b/iu', 'זוהי בדיקה') .

Тем не менее он требует PCRE v8.10, поставляется с PHP с 5.3.4 или когда упоминается в флагом компиляции --with-pcre-regex=DIR .

Ref (на русском)