PCRE - 正则表达式(Perl 兼容)库是一组函数,可让您实现正则表达式模式匹配。这些函数中使用的模式语法与 Perl 非常相似。

安装

使用这些函数无需安装。这些函数是 PHP 核心的一部分。

运行时配置

这些函数的行为受 php.ini 中的设置影响。

PCRE 配置选项

名称默认描述可更改
pcre.backtrack_limit"1000000"PCRE的回溯限制。 PHP < 5.3.7 默认为 100000。PHP_INI_ALL
pcre.recursion_limit"100000"PCRE 的递归限制。请注意,如果设置为较高的数字,它可能会消耗所有可用的进程堆栈并最终使 PHP 崩溃(由于达到操作系统施加的堆栈大小限制)。PHP_INI_ALL
pcre.jit"1"设置为"1"时启用 PCRE 的即时编译。PHP_INI_ALL

PHP 正则表达式函数

函数描述
preg_filter()执行正则表达式搜索并替换。
preg_grep()返回与模式匹配的数组条目。
preg_last_error_msg()返回最后一次 PCRE 正则表达式执行的错误消息。
preg_last_error()返回最后一次 PCRE 正则表达式执行的错误代码。
preg_quote()引用正则表达式字符。
preg_replace()执行正则表达式搜索和替换。
preg_split()分割字符串正则表达式。

PHP 正则表达式预定义常量

以下常量由此扩展定义,并且仅可用当扩展已编译为 PHP 或在运行时动态加载时。

常量描述截至
PREG_PATTERN_ORDER对结果进行排序,以便 $matches[0] 是完整模式匹配的数组,$matches[1] 是第一个括号匹配的字符串数组子模式等。该标志仅与 preg_match_all() 一起使用。
PREG_SET_ORDER对结果进行排序,以便 $matches[0] 是第一组匹配的数组, $matches[1] 是第二组匹配的数组,依此类推。该标志仅与 preg_match_all() 一起使用。
PREG_OFFSET_CAPTURE请参阅 PREG_SPLIT_OFFSET_CAPTURE 的说明。
PREG_SPLIT_NO_EMPTY此标志告诉 preg_split( ) 仅返回非空片段。
PREG_SPLIT_DELIM_CAPTURE此标志告诉 preg_split() 也可以捕获分隔符模式中的括号表达式。
PREG_SPLIT_OFFSET_CAPTURE如果设置此标志,则对于每个出现的匹配,还将返回附加字符串偏移量。请注意,这会更改数组中的返回值,其中每个元素都是一个数组,由偏移量 0 处的匹配字符串及其在主题内偏移量 1 处的字符串偏移量组成。此标志仅用于 preg_split().
PREG_UNMATCHED_AS_NULL此标志告诉 preg_match() 和 preg_match_all() 将 $matches 中不匹配的子模式作为空值包含在内。如果没有此标志,不匹配的子模式将报告为空字符串,就好像它们是空匹配一样。设置此标志可以区分这两种情况。7.2.0
PREG_NO_ERRORpreg_last_error() 如果没有错误。5.2.0
PREG_INTERNAL_ERROR如果存在内部错误,则由 preg_last_error() 返回PCRE 错误。5.2.0
PREG_BACKTRACK_LIMIT_ERRORpreg_last_error() 如果回溯限制已用尽。5.2.0
PREG_RECURSION_LIMIT_ERROR5.2.0
PREG_RECURSION_LIMIT_ERROR如果递归限制已用尽,则由 preg_last_error() 返回。5.2.0
PREG_BAD_UTF8_ERROR返回preg_last_error() 如果最后一个错误是由格式错误的 UTF-8 数据引起的(仅当在 UTF-8 模式下运行正则表达式时)。5.2.0
PREG_BAD_UTF8_OFFSET_ERROR如果偏移量没有,则由 preg_last_error() 返回不对应于有效 UTF-8 代码点的开头(仅当在 UTF-8 模式下运行正则表达式时)。5.3.0
PREG_JIT_STACKLIMIT_ERROR如果最后一个 PCRE 函数由于限制而失败,则由 preg_last_error() 返回JIT 堆栈空间。7.0.0
PCRE_VERSIONPCRE 版本和发布日期(例如"7.0 2006 年 12 月 18 日")。5.2.4