文章教程

10.2正则表达式基础语法

9/17/2020 9:49:37 PM 人评论 次浏览

10.2 正则表达式基础语法

正则表达式由一些普通字符和一些元字符组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,如“*”、“?”等。PCRE风格的正则表达式一般都放置在定界符“/”中间,如“/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/”。

10.2.1 元字符

元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

要想真正用好正则表达式,正确地理解元字符是最重要的事情。表10-1列出了常用的元字符和其简单描述。

表10-1 常用的元字符

元字符 描述 举例
. 匹配任何单个字符 如c.ke,匹配cake,但是不匹配cook
^ 匹配一行开始的空字符串 如^where,匹配where in…,但是不匹配when…
$ 匹配出现在行尾的空字符串 如$way,匹配… on the way,但是不匹配…on the WAY
* 匹配前面的子表达式零次或多次 如ta*k,匹配tk,tak,taak到ta…k
+ 匹配前面的子表达式一次或多次 如ta*k,匹配tak,taak到ta…k,但是不匹配tk
? 匹配前面的子表达式零次或一次 如ta*k,匹配tk,tak
{n} n是一个非负整数。匹配确定的n次 如ta{2}k,匹配taak
{n,} n是一个非负整数。至少匹配n次 如to{2}e,匹配tooe,toooe等
{n,m} m和n均为非负整数,其中n≤m。最少匹配n次且最多匹配m次 如to{1,3}e,匹配toe,tooe,toooe
\b 匹配一个单词边界 如er\b,匹配never,但是不匹配verb
\B 匹配非单词边界 如er\B匹配verb,但是不匹配never
[] 匹配[]内的任意一个字符 如[abc]可以匹配a或者b或者c
| 选择字符,匹配|两侧的任意字符 如TO|to|To|tO,可以匹配4种不同字符
- 连字符,匹配一个范围 如[a-z],可以匹配任意一个小写字母
[^] 不匹配[]内的任何一个字符 如[^a-z],匹配非小写字母
\ 转义字符 如需要匹配. ,?等,需要把它们变为普通字符,“\.”用于匹配“.”
\ 反斜杠,见表10-2和表10-3
() 分组或选择 如(very){1,},匹配very good、very very good;如(four|six)th,匹配fourth或sixth
(?:pattern) 匹配pattern但不获取匹配结果 如industr(?:y|ies)就是比industry|industries更简略的表达式
(?=pattern) 正向预查,在任何匹配pattern的字符串开始处匹配查找字符串 如Windows(?=95|98|NT|2000)能匹配Windows 2000,但不能匹配Windows 3.1
(?!pattern) 负向预查,在任何不匹配pattern的字符串开始处匹配查找字符串 如Windows(?!95|98|NT|2000)能匹配Windows 3.1,但不能匹配Windows 2000

表10-2 反斜杠指定的预定义字符集

预定义字符集 说明
\d 任意一个十进制数字,相当于[0-9]
\D 任意一个非十进制数字,相当于[^0-9]
\s 任意一个空白字符,包括Tab键和换行符
\S 任意一个非空白字符
\w 任意一个单词字符,相当于[a-zA-Z0-9_]
\W 用于匹配所有与\w不匹配的字符

表10-3 反斜杠指定的不可打印字符集

字符 说明
\a 警报,ASCII中的<BEL>字符
\e Escape,ASCII中的<ESC>字符
\f 换页符,ASCII中的<FF>字符
\n 换行符,ASCII中的<LF>字符
\r 回车符,ASCII中的<CR>字符
\t 水平制表符,ASCII中的<HT>字符
\cx “control-x”,其中x是任意字符
\xhh 十六进制代码
\ddd 八进制代码

10.2.2 模式修饰符

模式修饰符的作用是规定正则表达式该如何解释和应用。PHP的主要模式如表10-4所示。

表10-4 PHP模式修饰符

修饰符 说明
i 忽略大小写模式
m 多行匹配。仅当表达式中出现“^”,“$”中的至少一个元字符且字符串有换行符“\n”时,“m”修饰符才起作用,不然被忽略。“m”修饰符可以改变“^”为表示每一行的头部
s 改变元字符'.'的含义,使其可以代表所有字符,也包含换行符。其他模式不能匹配换行符
x 忽略空白字符

教程类别