echo preg_match("/\b(בדיקה|מילה)\b/iu", "זוהי בדיקה");
По какой-то причине этот код возвращает 1 на нескольких серверах, на которых я тестировал, но 0 на одном конкретном сервере.
PCRE скомпилирован с поддержкой UTF-8 и поддержкой свойств Unicode. В чем может быть проблема?
Может быть разница между версиями PCRE, которые использует PHP.
Версия PHP и PCRE: http://php.net/pcre.installation
Вы должны использовать 8.10+ (PHP 5.3.4+)
Версия 8.10 25 июня 2010 года:
- Добавлен 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 (на русском)