gpt4 book ai didi

php - 检测 PCRE 是否是在没​​有 --enable-unicode-properties 或 --enable-utf8 配置开关的情况下构建的

转载 作者:行者123 更新时间:2023-12-02 07:58:49 30 4
gpt4 key购买 nike

我有一个 PHP 库,它使用许多正则表达式,其中包括用于多字节字符串的 \P 表达式,例如

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

虽然这适用于大多数版本,但我收到过一些关于正则表达式返回错误的报告。

根据操作平台的不同,来自 PCRE 的错误消息为:

Compilation failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset n

Compilation failed: support for \P, \p, and \X has not been compiled at offset n

我知道我可以在使用 \P 的代码开头测试正则表达式,并捕获返回的错误,然后使用该响应来设置兼容性标志并提供降级的(非 UTF-8)基于该兼容性标志的代码主体中没有 \P 的正则表达式。

我想知道是否有更简单的方法来确定 PCRE 是否是在没​​有 --enable-unicode-properties--enable-utf8 配置开关的情况下构建的。 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com