二:字符串和正则表达式_正则表达式

二:字符串和正则表达式_正则表达式

一.正则表达式概述
正则表达式是一种进行文本匹配的工具.在PHP中,正则表达式的创建很简单,只需将模式的内容包含在两个反斜线"/"之间,如"/PHP/".即将要匹配的内容放在定界符之间,其中定界符的使用不局限于"/",也可以使用除数字、字母和斜线以"/"外的任何字符.如:"#","/","!"

二.正则表达式的语法
正则表达式是由普通字符(例如A~Z)和特殊字符(如* 、/等元字符)组成的文字模式,正则表达式作为一个模板,可以将某个字符模式与所搜索的字符串进行匹配.
1.普通字符:是组成正则表达式的基本单位.内容如下:
(1)单字字符,数字:如a~z,A~Z,0~9 
(2)模式单元:如(ASD).即由多个普通字符组成的原子
(3)普通字符,如[ABC]
(4)重新使用的模式单元
(5)普通转义字符
(6)转义元字符
正则表达式的普通转义字符如下:
[ …]  位于括号之内的任意字符
[^…]  不在括号之内的任意字符
.   除换行符和其他Unicode行终止符之外的任意字符
/d            匹配一个数字字符,等价于[0~9]
/D           匹配一个非数字字符,等价于[^0~9]
/w           任何单词字符,包括字母和下划线.等价于"[A-Za-z0-9]"
/W           任何非单词字符,等价于[^A-Za-z0-9]
/s            任何空白字符,包括空格,制表符,分页符等.等价于"[/f/n/t/r/v]"
/S            任何非空白字符,等价于   "[^/f/n/t/r/v]"
/f             分页符.等价于/x0c或cL
/n            换行符.等价于/x0Aa或Cj
/r             回车符,等价于/x0d或cM
/t             制表符,等价于/x09或/cl
/v            垂直制表符,等价于/x0b或cKs
/oNN      匹配八进制数字
/xNN     匹配十六进行数字
/oC          匹配一个控制字符

2.特殊字符:
特殊字符就是一些有特殊含义的字符,如"*.php"中的*,简单地说就是表示任何字符串的意思.如果要查找文件中有"*"的文件,则需要对"*"进行转义,即在前面加上一个反斜械' / '.
(1)原子表:原子表[]存放一组原子,匹配其中的一个原子.对于一组按ASCII码顺序排列的原子可以使用" - "连接.
e.g :
/m[0123456789]/   匹配由一个字母"m"与一个数字组成的字符串.
/m[0-9]/
/0[xX][0-9a-fA-F]/   匹配一个简单的十六进制的数字
/[^0-9a-zA-Z_]/       匹配一个除英文字母数字和下划线以外的任意一个字符等同于//W/

(2)重复匹配:在正则表达式中有一些用于重复匹配其前原子的特殊字符:“*”、“+”、“?”。这些特殊字符实现的功能是相同的,唯一区别是重复匹配的次数不同
"*"表示重复匹配其前面的原子0次或1次或多次
"+"表示重复匹配其前面的原子1次或多次
"?"表示重复匹配其前面的原子0次或1次
上述3个重复匹配的特殊字符实现的是模糊次数的重复匹配,要精确的指定原子重复的次数,可以使用特殊字符{}指定所匹配原子出现的次数
{m}表示重复匹配其前面的原子m次
{m,n}表示重复匹配其前面的原子至少m次,至多n次
{m,}表示重复匹配其前面的原子至少m次
e.g :
/[A-Za-z][A-Za-z0-9]*/           对"*"前的原子进行0次或1次或多次匹配
/co{1,2}m/                               匹配com或coom

(3)边界限制
在应用正则表达式时,有时需要对其匹配的范围进行限制,以此来获取更准确的匹配结果
对匹配范围的边界有两种方法:第一是确保模式的匹配从字符串的末端开始,通过特殊字符"^"或者"/A"实现;第二是确保模式的匹配从字符串的末端开始,通过特殊字符"$"或者"/Z"实现.
e.x :
/^M/   判断首字符是否是大写字母"M"

(4)特殊字符" . "
特殊字符" . "匹配一个除换行符外的任何一个字符.相当于[^/n](Unix系统)或者[^/r/n](Windows系统)

(5)模式选择符" | "
模式选择符" | ",其作用是在正则表达式中对匹配的条件进行选择,可以匹配两个或都更多的选择之一。
e.x :
/^(/d{3}-)(/d{8})$|^(/d{4}-)(/d{7})$|^(/d{4}-)(/d{8})$/        判定是否是一个电话号码

(6)模式单元" () "
特殊字符" () "将其中的表达式变为原子使用,将其中的正则表达式看作一个整体,叫做模式单元.其使用方法与数学表达式中的括号类似。通过使用模式单元,其中的表达式可以被优先处理,如/^(/d{3}-)(/d{8})$|^(/d{4}-)(/d{7})$|^(/d{4}-)(/d{8})$/ 

3.模式匹配顺序:
首先是模式单元" () ",然后是重复匹配" ? " " * " " + " "{m,n}" ,然后是边界限制" ^ " " $ " " /b " " /B " " A " " Z ",最后是模式选择" | "

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值