概述
正则表达式(Regular Expression)是一种字符匹配工具,通过构建具有特定规则的模式,和输入字符串数据进行比较,然后进行匹配、分割、替换等等的相关操作。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了。
目前有两种不同规范的正则表达式:
POSIX 规范:在兼容 POSIX 的 UNIX 系统上,grep 和 egrep 之类的工具都遵循 POSIX 规范,一些数据库系统中的正则表达式也匹配 POSIX 规范。
PCRE 规范:为 Perl Compatible Regular Expressions 的缩写,中文即 Perl 兼容正则表达式,由 Philip Hazel 开发的 Perl 库,为很多现代工具所使用,大多数编程语言的正则表达式也都是集成该规范。
针对两种不同的正则表达式规范,PHP 提供了两组不同的函数库,分别为POSIX Regex 扩展库和PCRE 扩展库,每一个函数库对应于一种特定的正则表达式。
需要注意的是,从PHP5.3.0
开始,POSIX Regex 扩展将被废弃,所有调用本扩展中函数都将提示E_DEPRECATED
错误。
接下来本文会对 PCRE 规范的正则表达式作出详细介绍。
PCRE 正则语法
1. 分隔符
当使用 PCRE 函数的时候,模式需要由分隔符闭合包裹。分隔符可以使任意非字母数字、非反斜线、非空白字符。一般是使用斜线 /
作为定界符。
如果分隔符需要在模式内进行匹配,它必须使用反斜线进行转义。如果分隔符经常在 模式内出现, 一个更好的选择就是是用其他分隔符来提高可读性。
2. 原子
原子是正则表达式的最基本的组成单位,而且必须至少包含一个原子。常见的有:
. 匹配除换行符之外任意字符
\d 匹配任意一个十进制数字
\D 匹配任意一个非十进制字符
\s 匹配一个不可见原子
\S 匹配一个可见原子
\w 匹配任意一个数字、字母或下划线,同 `[a-zA-Z0-9_]`
\W 匹配任意非一个数字、字母或下划线,同`[^a-zA-Z0-9_]`
[] 作为一个原子,匹配 [] 之间的一个原子
[^] 作为一个原子,不能匹配 [] 之间的一个原子
PCRE 中有关原子和元字符的完整列表,请见正则表达式。
3. 元字符
元字符用来修饰原子的字符,不可以单独出现。