Обнаружение, если PCRE был создан без параметров –enable-unicode или -enable-utf8

У меня есть библиотека PHP, которая использует ряд регулярных выражений с выражениями \P для многобайтовых строк, например

 ((((?:\P{M}\p{M}*)+?)|(\'[^\']*\')|(\"[^\"]*\"))!)?\$?([az]{1,3})\$?(\d+) 

Хотя это работает на большинстве построек, у меня было несколько сообщений о том, что regexp возвращает ошибку.

В зависимости от операционной платформы сообщения об ошибках от PCRE:

Ошибка компиляции: PCRE не поддерживает \ L, \ l, \ N, \ P, \ p, \ U, \ u или \ X при смещении n

или

Ошибка компиляции: поддержка \ P, \ p и \ X не была скомпилирована со смещением n

Я знаю, что, возможно, я могу проверить регулярное выражение в начале моего кода, который использует \P и ловушку для возвращаемой ошибки, а затем использовать этот ответ для установки флага совместимости и предоставления неопределенного (не UTF-8) регулярного выражения без \P в основной части моего кода на основе этого флага совместимости.

Мне было интересно, был ли более простой способ определить, был ли PCRE создан без параметров --enable-unicode-properties или --enable-utf8 . PHP предоставляет доступ к константе PCRE_VERSION , но это не поможет определить, включена ли поддержка \P или нет.

Solutions Collecting From Web of "Обнаружение, если PCRE был создан без параметров –enable-unicode или -enable-utf8"

Помимо попытки его использования, я думаю, что единственный способ – использовать инструмент командной строки pcretest с параметром -C (параметры времени компиляции):

 bash-4.1.5$ pcretest -C No UTF-8 support No Unicode properties support Newline sequence is LF \R matches all Unicode newlines Internal link size = 2 POSIX malloc threshold = 10 Default match limit = 10000000 Default recursion depth limit = 10000000 Match recursion uses stack 

Хотя комментарии предполагают проверку PREG_BAD_UTF8_ERROR источника PHP http://lxr.php.net/xref/PHP_5_6/ext/pcre/php_pcre.c#141, эта константа всегда доступна, если PCRE. В самом деле, кажется, что --enable-unicode-properties – это переключатель PCRE lib и просто не отображается PHP. Единственное, что я могу себе представить, – это простое регулярное выражение с предупреждением, подавленным …