Каким должен быть флаг preg_match_all `u`? - программирование

Каким должен быть флаг 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

Picture.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
4b9b3361

Ответ 1

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

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

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

Решение заключается в использовании альтернативного пакета PHP.

Ответ 2

Это зависит от компиляции PCRE с помощью --enable-utf8.