结构
定界符:多种都可以,常用为//
原子:最少的一个匹配单位(放在定界符中),在一个正则表达式中,至少要有一个原子
元字符:元字符不能单独使用,修饰原子,是用来扩展原子功能和限定功能的,(写在定界符号中)
模式修正符号:修正,对模式(正则)修正,(写在定界符号右边)
备注:
1.正则表达式为一个字符串,单引号双引号有区别,优先使用单引号(双引号内认转义字符,单引号内不认转义字符)
2.定界符不仅局限于“//”。除了字母,数字和斜线“\”以外的任何字符都可以作为定界符,像“#”,“|”,“!”等都可以的。
3.打印字符指键盘上所有可以显示出来的字符,非打印值无法显示的字符,比如,回车,换行
4.\转义字符,
(1)可以将有意义的字符转成没有意义的原子字符(将有意义变为原子)。
(2)可以将没有意义的字符转成有意义的原子(比如:\t,tab键)
(3)所有没有意义的字符,加了转义也没有意义的,可加可不加(比如:/a/和/\a/,/@/和/\@/,/9/和/\9/),php有个函数专门识别那些属于有意义的字符
5.常用非打印字符

非打印字符 含义描述
\cx 匹配由x指明的控制字符。如\cM匹配一个Control-M或回车符。x的值必须为A~Z或a~z之一
\f 匹配一个换页符。等价于\x0c或\cL
\n 匹配一个换行符。等价于\x0a或\cJ
\r 匹配一个回车符。等价于\x0d或\cM
\t 匹配一个制表符。等价于\x09或\cI
\v 匹配一个垂直制表符。等价于\x0b或\cK

.
一:原子
原子是正则表达式的最近本的组成单元,而且在每个模式中最少要包含一个原子。原子是有所有那些未显示指定为元字符的打印和非打印字符组成,具体分为5类。
1.普通字符作为原子:如a~z,A~Z,0~9等
2.一些特殊字符和转义后元字符作为原子:
所有标点符号,但语句特殊意义的符号需要转义后才可以作为原子,如:\”\’\*\+\?\.等
3.一些非打印字符作为原子:如:\f\n \r\t\v\cx
4.使用“通用字符类型”作为原子:如:\d\D\w\W\s\S

原子 含义描述
\d 代表任意一个数字,等价于[0-9]
\D 代表任意一个非数字,等价于[^0-9]
\w 代表任意一个字 a-z A-Z 0-9 _,等价于[a-zA-Z0-9_]
\W 代表任意一个非字 除了 a-z A-Z 0-9 _之外的所有字符,等价于[^a-zA-Z0-9_]
\s 代表空白,回车,换行等非打印字符都算空白,等价于[\t\n\f\v]等,这里未全部列完
\S 代表非空白,等价于[^\t\n\f\v]等,这里未全部列完

5.自定义原子表([])作为原子:如:’/[apj]sp/’ ‘/[^apj]sp’
(1)-从那到那区间范围,如:[a-zA-Z]
(2)^除列表中的,如:[^-zA-Z]
6.点(.)代表所有的

二:元字符

元字符 含义描述
* 匹配0次.1次或多次其前的原子,等同于{0,}
+ 匹配1次或多次其前的原子,等同于{1,}
? 匹配0次或1次其前的原子,等同于{0,1}
| 匹配两个或多个分支选择,|的优先级是最低的
{n} 表示其前面的原子恰好出现n次
{n,} 表示其前面的原子出现不小于n次(注意:{,m}没有这种写法)
{n,m} 表示其前面的原子至少出现n次,至多出现m次
^或\A 匹配输入字符串的开始位置(或在多行模式下行的开头,即紧随一个换行符之后)
$或\Z 匹配输入字符串的结束位置(或在多行模式下行的结尾,即紧随一个换行之前)
\b 匹配单词的边界
\B 匹配除单词边界以外的部分,举例:”this is island”,匹配this中is(/\Bis\b/),匹配is(/\bis\b/),匹配island中的is(/\bis\B/)
() 匹配其整体为一个原子,即模式单元,可以理解为由多个单个原子组成的大原子

.
三:括号()的作用
1.改变优先级别,例如:’/oracle|mysql/’和’/orac(le|my)sql/’
2.将小原子变成大原子,例如:’/mysql*/’和’/(mysql)*/’
3.子模式,整个表达式是一个大的模式,小括号中是每个独立的子模式,要禁用当前括号的子模式时在括号内前部加上’?:’例如/(?:\d{4})(-|\/)\d{2}(-|\/)\d{2}/
4.反向引用,例如匹配日期,’2017-08-22’或者’2017/08/22′,此时用’/\d{4}(-|\/)\d{2}(-|\/)\d{2}/’是无法保证分隔符相同,同时为’-‘或者同时为’/’,此时就要用到子模式,把匹配第二个连接符的地方'(-|\/)’更换为’\1’,即为’/\d{4}(-|\/)\d{2}\1\d{2}/’,1代表第一个括号括号对应的规则。在替换函数内’\1’也可以写为’${1}’格式
5.注释,语法:(?#comment),例如:’/.*(?#random)/’

四:模式修正符号

模式修正符 含义描述
i 修正正则表达式,使其不区分大小写(默认是区分大小写的)
m 修正正则表达式,可以视为多行(默认视整个字符串为一行),在使用’^’或’$’这两个符号时,每一行满足都可以
s 修正正则表达式中的点 . 可以匹配换行符号(默认 . 不能匹配回车符号)
x 修正正则表达式,可以省略空白,例如:’/web server/x’等同于’webserver’
U 取消贪婪模式,(.*,.+)正则表达式比较贪婪,通常在’*+’后面加’?’来取消贪婪模式,如果已经有’?’了再加上了’U’,那么效果又变为贪婪模式,类似于负负得正
$str='this <b>is</b> a test <b>web</b> server';
$reg='/\<b\>.*\<\/b\>/';
preg_match_all($reg,$str,$attr);
//匹配结果是'is a test web',但是我们想要的是'is'和'web'
//此时正则表达式修改为'/\<b\>.*\<\/b\>/U'.
//但是更常用的方式是不加模式修正符,而是在*后加上?取消贪婪模式,'/\<b\>.*?\<\/b\>'
作者 叮 叮 2017年8月21日
2017/10/18/11:22:05am 2017/8/21/15:21:06
0 202