我有一个PHP库,它使用了多个正则表达式,这些表达式具有针对多字节字符串的\P
表达式,例如
((((?:\P{M}\p{M}*)+?)|(\'[^\']*\')|(\"[^\"]*\"))!)?\$?([a-z]{1,3})\$?(\d+)
尽管此方法适用于大多数构建,但我有一些关于regexp返回错误的报告。
根据操作平台的不同,来自PCRE的错误消息是:
或者
我知道我可以在使用
\P
的代码开头测试一个正则表达式,并捕获返回的错误,然后使用该响应设置兼容性标志并提供一个降级的(非UTF-8)正则表达式,其中不包含\P
基于该兼容性标志的代码主体。我想知道是否有任何更简单的方法来确定是否在没有
--enable-unicode-properties
或--enable-utf8
配置开关的情况下构建了PCRE。 PHP提供了对PCRE_VERSION
常量的访问权限,但这无助于确定是否启用了\P
支持。 最佳答案
除了尝试之外,我认为唯一的方法是使用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
关于php - 检测PCRE是否在没有--enable-unicode-properties或--enable-utf8配置开关的情况下构建,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4509576/