От чего зависит флаг preg_match_all `u`?

У меня есть некоторый код в приложении PHP, который возвращает null, когда я пытаюсь использовать его на рабочем сервере, но он отлично работает на сервере разработки. Вот строка кода:

// use the regex unicode support to separate the UTF-8 characters into an array
preg_match_all( '/./us', $str, $match );

Что u флаг зависит от? Я проверял с mb_string включен и отключен, и это, кажется, не влияет на это.

Я получаю ошибку

preg_match_all: Compilation failed: unknown option bit(s) set at offset -1

больше информации

это одна из опций на prodction сервере:

'--with-pcre-regex=/opt/pcre'

и вот разделы pcre

http://img829.imageshack.us/img829/8524/pictureke.png

Я полагаю, что это примечание, о котором говорил Уэсли:

In  order  process  UTF-8 strings, you must build PCRE to include UTF-8
support in the code, and, in addition,  you  must  call  pcre_compile()
with  the  PCRE_UTF8  option  flag,  or the pattern must start with the
sequence (*UTF8). When either of these is the case,  both  the  pattern
and  any  subject  strings  that  are matched against it are treated as
UTF-8 strings instead of strings of 1-byte characters.

Любые ссылки или советы о том, как "собрать PCRE, чтобы включить UTF-8"?

с помощью

Результаты pcretest -C

PCRE version 6.6 06-Feb-2006
Compiled with
  UTF-8 support
  Unicode properties support
  Newline character is LF
  Internal link size = 2
  POSIX malloc threshold = 10
  Default match limit = 10000000
  Default recursion depth limit = 10000000
  Match recursion uses stack

2 ответа

Этот флаг зависит от того, какой PCRE создается с включенной поддержкой юникода.

PHP связывает эту библиотеку, и она обычно создается с включенной поддержкой юникода: u Модификатор доступен и всегда работает с PHP 4.1.0, когда PHP создается с помощью встроенной библиотеки PCRE.

Однако некоторые дистрибутивы Linux собирают PHP на основе собственной сборки PCRE, для которой не включена поддержка юникода, и в результате u модификатор не работает на этих сборках.

Решение состоит в том, чтобы использовать альтернативный пакет PHP.

Это зависит от того, какой PCRE компилируется с --enable-utf8.

Другие вопросы по тегам