Без использования флага u
используется шестиугольник, который может использоваться [\x{00}-\x{ff}]
, но с флагом u
он достигает 4-байтового значения \x{7fffffff}
([\x{00000000}-\x{7fffffff}]
).
Итак, если я выполняю приведенный ниже код:
preg_match("/[\x{00000000}-\x{80000000}]+/u", $str, $match);
Вы получите эту ошибку:
Warning: preg_match(): Compilation failed: character value in \x{...} sequence is too large
Поэтому я не могу сопоставить букву типа 𡃁
с эквивалентным шестнадцатеричным значением f0 a1 83 81
. Вопрос заключается не в том, как сопоставить эти буквы, а о том, как этот диапазон и эта граница пришли, поскольку модификатор u
должен обрабатывать строки как UTF-16
PCRE поддерживает UTF-16 с версии v8.30
echo PCRE_VERSION;
Версия PCRE с PHP 5.3.24 - 5.3.28, 5.4.14 - 5.5.7:
8.32 2012-11-30
Версия PCRE с PHP 5.3.19 - 5.3.23, 5.4.9 - 5.4.13:
8.31 2012-07-06