学习目的:匹配字符
一、正则表达式
正则表达式由元字符和文本字符和修饰符组成,是一个特定的格式化模式,可以匹配、替换、截取匹配的字符串。
二、修饰符有:i 忽略大小写;g全局匹配;m多行匹配;s单文本模式,只有在此模式下元字符(.)可以匹配换行符;x忽略空白字符;u匹配中文不乱码
三、特殊字符:
1.^开始字符,如:^m,表示以字母m开头的字符串;^还表示取反,如:[^m]不含有m的字符串,要匹配^需要转义为^
2.$结束字符,如:m$,表示以字母m结尾的字符串,要匹配$需要转义为$
3.转义字符,要匹配要转义为\,n匹配字符n, 匹配换行符
4.( )标记一个子字符串的开始和结束,用( )时同时会把这段字符串输出,要匹配( ),用(和)
5.[ ]标记中括号表达式的开始和结束,要匹配( ),用[和]
6.{ }标记限定符表达式的开始和结束,要匹配{ },用{和}
7. . 匹配除换行符 之外的任何单字符串,要匹配 . ,用.
8.| 指明两项之间任意一个满足都可以。如:m|n,字符串存在m和n都能匹配,要匹配 | ,用|
9.*匹配前面的子表达式零次或多次,要匹配 *,用*
10.+匹配前面的子表达式一次或多次,要匹配 +,用+
11.?匹配前面的子表达式零次或一次,要匹配 ?,用?
四、限定符:
1.{n} n为一个非负整数,匹配n次
2.{n,} n为一个非负整数,至少匹配n次
3.{n, m} n和m均为一个非负整数,最少匹配n次,最多匹配m次
4.*,+,?
五、定位符
1. 匹配单词边界,即字与空格间的位置,如果匹配m,tim能匹配,html不能匹配
2.B 非单词边界匹配,如果匹配m,tim不能匹配,html能匹配
3.^,$
六、 字符类[ ],连字符 -,点号字符 .
1.字符类[ ]:一个方括号只能匹配一个字符
2.连字符 -:如要匹配12346,可以用[1-6],[1-6]被称为字符簇
3.点号字符 .:可以匹配除换行符外的任意一个字符
七、捕获分组
1.括号符号 ( )
可以改变限定符的作用范围,如:(thir|four)th,加上小括号是匹配单词thirth或fourth,如果不加小括号就变为匹配thir或fourth了
分组也就是子表达式,如:(.[0-9]{1,3}){3},就是对分组(.[0-9]{1,3})重复操作。
2.反向引用即后向引用
如:要匹配zery zery,可以写为:w+sw+,但是也可以写为(w+)s1,其中1就是引用前面的括号分组(w+),分组引用序号左到右一次为1,2,3...,引用时前面要加,索引0表示匹配的整个内容
3.(?<name>exp)为分组自定义名字,用?<name>引用的时候用k<name>即可,如:(?<char>w+)sk<char>
4.(?:exp) 匹配exp,不捕获匹配的文本即不输出文本,也不给此分组分配组号,不能用在反向引用中
以下是零宽断言:可以有也可以没有且与内容的间隔宽度为零
5.(?=exp) 匹配exp前面的字符,如:how are you doing 正则:(?<txt>.+(?=ing)) 这里就是取ing前面的所有字符,并且定义了一个名为txt的捕获分组,在这里txt的值为 how are you do
6.(?<=exp) 匹配exp后面的字符,如:how are you doing 正则:(?<txt>.+(?<=how)) 这里就是取how后面的所有字符,并且定义了一个名为txt的捕获分组,在这里txt的值为 are you doing
7.(?!exp) 匹配后面不含有exp的字符串,如:123abc 正则:d{3}(?!d) 匹配前面时三个数字123后面不是数字的字符串
8.(?<!exp) 匹配前面不含有exp的字符串,如:abc123 正则:(?<!d)d{3} 匹配三个数字123前面不是数字的字符串
八、常用的形式
1.x|y 匹配x或y
2.[xyz] 匹配x,y,z中任意一个字符
3.[^xyz] 匹配除x,y,z的任意一个字符
4.[a-z] 匹配小写字母a~z的任意一个字母
5.[A-Z] 匹配大写写字母A~Z的任意一个字母
6.[0-9]或是d 匹配0~9的任意一个数字
7.D ==[^0-9] 匹配一个非数字字符
8.w 匹配字母,数字,下划线。等价于[a-zA-Z0-9_]
9.W匹配非字母,数字,下划线。等价于[^a-zA-Z0-9_]
10.s 匹配任何空白字符,包括空格,制表符,换页符。等价于[f v]
11.S 匹配任何非空白字符,包括空格,制表符,换页符。等价于[^f v]
12.f 换页符
13. 换行符
14. 回车符
15. 制表符
16.v 垂直制表符
九、php如何使用正则表达式(PCRE)
<?php preg_match('/d+/u', '123'); //参数1时正表达式要在开头和结尾加上/和/,参数2是要匹配的字符串。只匹配一次返回值为0或1 preg_match('/d+/u', '123'); //参数1时正表达式要在开头和结尾加上/和/,参数2是要匹配的字符串。匹配多次返回匹配的次数(可能为0),或者发生错误返回false preg_replace('/d+/u', '123', '456789aa', '1'); //参数1时正表达式要在开头和结尾加上/和/,参数2是要匹配成功后用来替换原子符串的字符串,参数3是要搜素的字符串,参数4是替换的次数,默认-1无限制 ?>