我有一个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/

10-13 04:23