河南龙祥软件科技有限公司

He Nan Long Xiang Software Technology Co., Ltd.

24小时服务热线:18236995786

正则表达式笔记和在php中的使用

正则表达式是用来匹配符合条件的字符串的,使用它匹配字符串非常灵活,可以设置各种条件在字符串里匹配符合的字符串,如匹配字符串中所有的数字、匹配字符串中所有指定位数的数字等。

在php中使用正则表达式有两个函数:

        一、preg_match($preg,$str,$match)函数,匹配第一个符合条件的结果,匹配到就返回。第一个参数是正则表达式,第二个参数是要搜索的字符串,第三个参数是存放匹配到的结果的数组变量,这个函数返回的结果是0或1,没有匹配到就是0,匹配到就是1。

        二、preg_match_all($preg,$str,$match)函数,匹配所有符合条件的结果。第一个参数是正则表达式,第二个参数是要搜索的字符串,第三个参数是存放匹配到的结果的数组变量,如果有匹配到,数组中会有一个元素,这一个元素也是一个数组,里面放了所有匹配到的结果,这个函数返回的结果是匹配到的数量。

示例:

$str="my name is zhang san, my phone is 15225157604";

$preg="/a\w*/";       //匹配以a开头后面是0个或多个英文字母或数字的字符串,因为空格不是英文字母和数字,所以遇到空格会结束,在php中使用正则表达式要在正则表达式的两头加上/,不加会报错。

$res=preg_match($preg,$str,$match);    //这里使用preg_match函数。

echo "res的结果是:";

var_demp($res);     //输出函数返回的结果。

echo "<br/>";       //输出一个换行用来区分两个结果。

echo "第三个参数中的结果是:";
var_demp($match);      //输出第三个参数中得到的结果。

执行结果:

111.jpg

将示例中的$res=preg_match($preg,$str,$match);换成$res=preg_match_all($preg,$str,$match);后的结果:

112.jpg

正则表达式的符号及含义:

^    起始位置,从字符串的起始位置开始,如:“^abc”是为了匹配字符串中开头的abc,如果开头不是abc就匹配不到。

$     结束位置,如:"abc$"是为了匹配字符串末尾的abc,如果末尾不是abc就匹配不到。

\     作用一、和紧跟它的指定英文字母组成转义字符来表示特殊的含义,比如“\d”表示从0到9的数字。作用二、将后面的任何字符都作为一个字符进行匹配,此时这个字符不再有它之前的作用,如\\可以匹配字符串中的\,\\d可以匹配字符串中的\d。

*    匹配前面的子表达式任意次,也就是0次或1次或多次,等价于{0,},例如:ao*会先匹配a,匹配到a后再看a后面有没有o,没有就只返回a,有o就返回o,有多个就返回多个,所以可以匹配到a,也可以匹配到ao,还可以匹配到aoo,如果只是写\d*,就会先匹配空字符,匹配到空字符后看它后面有没有数字,如果有数字有几个就匹配几个,如果没有数字就只返回个空字符,所以有时候会看到返回的结果就是一个空字符。

+   匹配前面的子表达式一次或多次,等价于{1,},例如:ao+会先匹配a,匹配到a后再看看a后面有没有o,没有就匹配下一个a,有就看后面是不是连续有多个o,所以它能匹配到ao,也可以匹配到aoo,但不能匹配到a。

?  作用一、匹配前面的子表达式0次或一次,等价于{0,1},例如:ao?会先匹配a,匹配到a后再看a后面有没有o,没有就只返回a,有就返回ao,不会匹配到aoo。作用二、如果这个符号跟再其它次数限制符(*、+、?、{n}、{n,m})后面时,就是非贪婪模式,匹配最少次数的字符,如字符串“aooood”,用o+会匹配到"oooo"这一个结果,但是用o+?就会匹配到"o"、"o"、"o"、"o",会有四个结果。默认都是贪婪模式。

{n}  匹配前面的子表达式指定次数,这个n必须是非负整数,包括0,例如:ao{2},只会匹配aoo,不会匹配ao。xaooods中的aoo就能被匹配到,第三个o不会被匹配到。

{n,m}   匹配前面的子表达式最少n次,最多m次,这里的n和m都必须是非负整数,例如:ao{2,3}会匹配到xaooods中的aoo和aooo,不会匹配到a和ao。

.    匹配除\r、\n外的任何字符,\r和\n是换行符。

|    在两侧加上子表达式用来匹配左侧或右侧的表达式,如:ao|book会匹配字符串中的ao和book。

[xyz]  匹配[]中的所有字符,如:[ace]就是匹配字符串中的a、c和e,一般用来匹配手机号第二位数字如:1[358],可以匹配13、15、18开头的数字。

[^xyz]  匹配不包含xyz的字符串,如:1[^358],就是匹配1后面不是3、5、8的结果,空格也会被匹配到。

[a-z]   匹配指定范围内的字符,包含起始字符和结束字符,[a-z]是匹配小写字母a到小写字母z,[A-Z]是匹配大写字母A到大写字母Z,[0-9]是匹配0-9的数字,可以写成[a-zA-Z0-9]来匹配所有英文字母和数字。

[^a-z]  匹配不包含指定范围内的字符,这里是过滤掉a-z之间的英文字母,包含a和z。

\b    匹配一个单词的边界,也就是单词的末尾,例如:字符串"my name is zhang san",使用n\b可以匹配到san里的n,name里的n是匹配不到的,使用\w+n\b可以证明,返回的结果是san,\w表示匹配所有英文字母,+表示匹配一次或多次n表示后面要跟上n,\b表示这个n应该在英文单词的末尾。

\B   匹配一个单词的非边界位置,例如:字符串"my name is zhang san",使用n\B可以匹配到name里的n和zhang里的n,san里的n匹配不到。

\cx  匹配由x指明的控制字符,例如:\cM匹配一个Control-M或回车符,x必须是A-Z或a-z中的一个,否则c将作为一个普通的字符使用。//还没有测试效果

\d   匹配一个数字字符,等价于[0-9]。

\D  匹配一个非数字字符,等价于[^0-9]。

\f    匹配一个换页符,等价于\x0c或\cL。

\n   匹配一个换行符,等价于\x0a或\cJ。

\r    匹配一个回车符,等价于\x0d或\cM。

\t    匹配一个制表符,等价于\x09或\cI。

\v    匹配一个垂直制表符,等价于\x0b或\cK。

\s    匹配所有不可见的字符,如空格、回车、换行、换页等,等价于[\f\n\r\t\v]。

\S   匹配所有可见的字符,等价于[^\f\n\r\t\v]。

\xn   匹配n,其中n是一个两位的十六进制值,如:\x41可以匹配到A,因为A的ASCII码是65,十六进制41的值也是65,所以匹配到A,\x6F匹配到的是o。


使用正则表达式替换匹配到的内容:

$str="my name is zhang san, my phone is 15225157604";

$preg="/an/";      //匹配字符串中的an。

$res=preg_replace($preg,"xx",$str);          //将匹配到的内容替换成xx。

echo "res的结果是:";

var_dump($res);

执行结果:

113.jpg

友情链接  LINKS

扫码加微信

关注公众号

河南龙祥软件科技有限公司

联系电话:18236995786(微信同号)

公司地址:河南省郑州市登封市君召乡陈爻

备案号:豫ICP备3306-91号

营业执照

0.173882s