河南龙祥软件科技有限公司
He Nan Long Xiang Software Technology Co., Ltd.
24小时服务热线:18236995786
正则表达式是用来匹配符合条件的字符串的,使用它匹配字符串非常灵活,可以设置各种条件在字符串里匹配符合的字符串,如匹配字符串中所有的数字、匹配字符串中所有指定位数的数字等。
在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); //输出第三个参数中得到的结果。
执行结果:
将示例中的$res=preg_match($preg,$str,$match);换成$res=preg_match_all($preg,$str,$match);后的结果:
正则表达式的符号及含义:
^ 起始位置,从字符串的起始位置开始,如:“^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);
执行结果:
友情链接 LINKS
扫码加微信
关注公众号