PHP 日本大会 2024

预定义常量

以下常量由此扩展定义,只有在将扩展编译到 PHP 中或在运行时动态加载时才可用。

PREG 常量
常量 描述 自版本
PREG_PATTERN_ORDER (int) 对结果进行排序,以便$matches[0] 是完整模式匹配的数组,$matches[1] 是第一个带括号的子模式匹配的字符串数组,依此类推。此标志仅与preg_match_all()一起使用。  
PREG_SET_ORDER (int) 对结果进行排序,以便$matches[0] 是第一组匹配的数组,$matches[1] 是第二组匹配的数组,依此类推。此标志仅与preg_match_all()一起使用。  
PREG_OFFSET_CAPTURE (int) 请参阅PREG_SPLIT_OFFSET_CAPTURE 的描述。  
PREG_SPLIT_NO_EMPTY (int) 此标志告诉preg_split() 只返回非空片段。  
PREG_SPLIT_DELIM_CAPTURE (int) 此标志告诉preg_split() 也捕获分隔符模式中带括号的表达式。  
PREG_SPLIT_OFFSET_CAPTURE (int) 如果设置此标志,则对于每次出现的匹配,还会返回附加的字符串偏移量。请注意,这会将返回值更改为一个数组,其中每个元素都是一个数组,包含在偏移量 0 处的匹配字符串及其在主题中的字符串偏移量在偏移量 1 处。此标志仅用于preg_split()  
PREG_UNMATCHED_AS_NULL (int) 此标志告诉preg_match()preg_match_all() 将不匹配的子模式包含在$matches 中作为null 值。如果没有此标志,不匹配的子模式将报告为空字符串,就像它们是空匹配一样。设置此标志允许区分这两种情况。 7.2.0
PREG_NO_ERROR (int) 如果没有任何错误,则由preg_last_error() 返回。 5.2.0
PREG_INTERNAL_ERROR (int) 如果发生内部 PCRE 错误,则由preg_last_error() 返回。 5.2.0
PREG_BACKTRACK_LIMIT_ERROR (int) 如果耗尽了回溯限制,则由preg_last_error() 返回。 5.2.0
PREG_RECURSION_LIMIT_ERROR (int) 如果耗尽了递归限制,则由preg_last_error() 返回。 5.2.0
PREG_BAD_UTF8_ERROR (int) 如果最后一个错误是由格式错误的 UTF-8 数据引起的(仅在UTF-8 模式下运行正则表达式时),则由preg_last_error() 返回。 5.2.0
PREG_BAD_UTF8_OFFSET_ERROR (int) 如果偏移量与有效 UTF-8 代码点的开头不对应(仅在UTF-8 模式下运行正则表达式时),则由preg_last_error() 返回。 5.3.0
PREG_JIT_STACKLIMIT_ERROR (int) 如果最后一个 PCRE 函数由于 JIT 堆栈空间有限而失败,则由preg_last_error() 返回。 7.0.0
PCRE_VERSION (string) PCRE 版本和发布日期(例如,“7.0 18-Dec-2006”)。 5.2.4
PCRE_VERSION_MAJOR (int) PCRE 主版本号。  
PCRE_VERSION_MINOR (int) PCRE 次版本号。  
PCRE_JIT_SUPPORT (bool) 指示 PCRE JIT 支持是否可用。  
PREG_GREP_INVERT (int) 返回不匹配给定模式的元素。  
添加注释

用户贡献的注释 2 个注释

27
erutan409 at hotmail dot com
9 年前
PREG_PATTERN_ORDER: 1
PREG_SET_ORDER: 2
PREG_OFFSET_CAPTURE: 256
PREG_SPLIT_NO_EMPTY: 1
PREG_SPLIT_DELIM_CAPTURE: 2
PREG_SPLIT_OFFSET_CAPTURE: 4
PREG_NO_ERROR: 0
PREG_INTERNAL_ERROR: 1
PREG_BACKTRACK_LIMIT_ERROR: 2
PREG_RECURSION_LIMIT_ERROR: 3
PREG_BAD_UTF8_ERROR: 4
PREG_BAD_UTF8_OFFSET_ERROR: 5
PCRE_VERSION: %YOUR_VERSION_NUMBER%
13
Robert
8 年前
PHP 7.0.0 中引入的新 PREG_JIT_STACKLIMIT_ERROR 常量的值为 6。

我在解析一个 112KB 的文件时遇到了此错误代码。preg_match_all 失败并出现此错误。有趣的是:matches 数组包含一些条目,但并非所有条目,因为命令失败了(我没有检查返回值)。

不幸的是,您无法配置 PCRE JIT 的堆栈大小。至少对我来说,唯一的解决方法是通过 php.ini 禁用 PCRE JIT (pcre.jit=0)。
To Top