1.part1-2day php正则表达式

学习目的:匹配字符

一、正则表达式

正则表达式由元字符和文本字符和修饰符组成,是一个特定的格式化模式,可以匹配、替换、截取匹配的字符串。

二、修饰符有:i 忽略大小写;g全局匹配;m多行匹配;s单文本模式,只有在此模式下元字符(.)可以匹配换行符;x忽略空白字符;u匹配中文不乱码

三、特殊字符:

1.^开始字符,如:^m,表示以字母m开头的字符串;^还表示取反,如:[^m]不含有m的字符串,要匹配^需要转义为\^

2.$结束字符,如:m$,表示以字母m结尾的字符串,要匹配$需要转义为\$

3.\转义字符,要匹配\要转义为\\,n匹配字符n,\n匹配换行符

4.( )标记一个子字符串的开始和结束,用( )时同时会把这段字符串输出,要匹配( ),用\(和\)

5.[ ]标记中括号表达式的开始和结束,要匹配( ),用\[和\]

6.{ }标记限定符表达式的开始和结束,要匹配{ },用\{和\}

7. . 匹配除换行符\n之外的任何单字符串,要匹配 . ,用\.

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.\b 匹配单词边界,即字与空格间的位置,如果匹配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,可以写为:\b\w+\b\s\w+\b,但是也可以写为\b(\w+)\b\s\1\b,其中\1就是引用前面的括号分组(\w+),分组引用序号左到右一次为1,2,3...,引用时前面要加\,索引0表示匹配的整个内容

3.(?<name>exp)为分组自定义名字,用?<name>引用的时候用\k<name>即可,如:\b(?<char>\w+)\b\s\k<char>\b

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\n\r\t\v]

11.\S 匹配任何非空白字符,包括空格,制表符,换页符。等价于[^\f\n\r\t\v]

12.\f 换页符

13.\n 换行符

14.\r 回车符

15.\t 制表符

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无限制
?>

正则表达式友情链接

posted @ 2020-01-13 08:35  小绵羊19957  阅读(256)  评论(0编辑  收藏  举报