У меня есть библиотека PHP, которая использует ряд регулярных выражений с выражениями \P
для многобайтовых строк, например.
((((?:\P{M}\p{M}*)+?)|(\'[^\']*\')|(\"[^\"]*\"))!)?\$?([a-z]{1,3})\$?(\d+)
В то время как это работает для большинства построений, у меня появилось несколько сообщений о том, что regexp возвращает ошибку.
В зависимости от операционной платформы сообщения об ошибках от PCRE:
Ошибка компиляции: PCRE не поддерживает \L,\l,\N,\P,\p,\U,\u или\X при смещении n
или
Ошибка компиляции: поддержка \P,\p и\X не была скомпилирована со смещением n
Я знаю, что, возможно, я могу проверить regexp в начале моего кода, который использует \P
, и ловушку для возвращаемой ошибки, затем использовать этот ответ для установки флага совместимости и предоставления деградированного (не UTF-8) regexp без \P
в основной части моего кода на основе этого флага совместимости.
Мне было интересно, был ли более простой способ определить, был ли PCRE создан без коммутаторов конфигурации --enable-unicode-properties
или --enable-utf8
. PHP предоставляет доступ к константе PCRE_VERSION
, но это не поможет определить, включена ли поддержка \P
или нет.