PHP 手册
后退 |  | 前进

# CXXII. Perl 兼容正则表达式函数

# 简介

本类函数中所使用的模式极其类似 Perl。表达式应被包含在定界符中，如斜线（/）。任何不是字母、数字或反斜线（\）的字符都可以作为定界符。如果作为定界符的字符必须被用在表达式本身中，则需要用反斜线转义。自 PHP 4.0.4 起，也可以使用 Perl 风格的 ()，{}，[] 和 <> 匹配定界符。详细解释见模式语法。

结束定界符的后面可以跟上不同的修正符以影响匹配方式。见模式修正符。

PHP 也支持 POSIX 扩展语法的正则表达式，见 POSIX 扩展正则表达式函数。

警告
要留意到 PCRE 的一些局限。更多信息见 http://www.pcre.org/pcre.txt。

# 需求

正则表达式的支持是由 PCRE（Perl Compatible Regular Expression）库提供的，这是个开放源代码的软件，作者为 Philip Hazel，版权属于英国剑桥大学。可于以下地址获得：ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/。

# 安装

自 PHP 4.2.0 起这些函数默认被激活。可以通过 --without-pcre-regex 禁用 PCRE 函数。如果不使用绑定的库的话，用 --with-pcre-regex=DIR 来指定 PCRE 库文件和头文件的路径。对早期版本必须在编译时用 --with-pcre-regex[=DIR] 才能使用这些函数。

PHP 的 Windows 版本已经内置该扩展模块的支持。无需加载任何附加扩展库即可使用这些函数。

# 运行时配置

本扩展模块在 `php.ini` 中未定义任何配置选项。

# 资源类型

本扩展模块未定义任何资源类型。

# 预定义常量

以下常量由本扩展模块定义，因此只有在本扩展模块被编译到 PHP 中，或者在运行时被动态加载后才有效。

表格 1. PREG 常量

常量 | 说明
--- | ---
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` 的说明。本标记自 PHP 4.3.0 起可用。
PREG_SPLIT_NO_EMPTY | 本标记使 preg_split() 仅返回非空的结果。
PREG_SPLIT_DELIM_CAPTURE | 本标记使 preg_split() 也捕获定界符模式中的括号表达。本标记自 PHP 4.0.5 起可用。
PREG_SPLIT_OFFSET_CAPTURE | 如果设定本标记，对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值，使其中的每个单元也是一个数组，其中第一项为匹配字符串，第二项为其偏移量。本标记自 PHP 4.3.0 起可用且仅用于 preg_split()。

# 范例

例子 1. 合法的模式举例

- /<\/\w+>/

- |(\d{3})-\d+|Sm

- /^(?i)php[34]/

- {^\s+(\s+)?$}

例子 2. 非法的模式举例

- /href='(.*)' - 缺少结束定界符

- /\w+\s*\w+/J - 未知的修正符 'J'

- 1-\d3-\d3-\d4| - 缺少起始定界符

后退 | 起点 | 前进
rar_open | 上一级 | 模式修正符