今天分享两个PHP的正则表达式实际案例,大家仔细理解,多多练习,很轻松就可以掌握了!
案例一:在字符串"111-222-444dkg123-444-666sdl666-777-888fkk"中,找出xxx-yyy-zzz这样的字符格式;
分析:很明显就是匹配出"111-222-444"和"666-777-888"这样的字符式,因此肯定是用正则表达式,代码如下:
$str = '111-222-444dkg123-444-666sdl666-777-888fkk';
// \d:就是表示数字0-9;而加上(),则是表示子表达式的意思;\1:表示就是第一个子表达式的值
// 比如匹配出的第一个数字是1,那么\1的值就是1,而{2}则表示子表达式的值重复两次,即"11"
// 多说一句:这里最好用单引号,因为用双引号有时候会出现莫名其妙的错误!
$reg = '/(\d)\1{2}-(\d)\2{2}-(\d)\3{2}/i';
// 正则匹配出的所有结果,都存放在$res数组变量中,只要遍历数组即可;
preg_match_all($reg, $str ,$res);
案例二:计算字符串"dkfSd调9皮dfdkUEDf谢小姐djf88sddfk"中,汉字,英文各有几个?
// 注意:计算汉字时,首先声明u,即用utf8编码,然后范围是16进制的4e00-9fa5
汉字:$reg = '/[\x{4e00}-\x{9fa5}]/u';
英文:$reg2 = '/[a-zA-Z]/';
然后都是通过preg_match_all方法,计算出$res[0]数组的大小count即可!
最后多说一句,案例一中的子表达式,也常用在伪静态.htaccess中,原理是一模一样的,区别在于那里面的\1就
换成了$1,改天重点分析一下。
大家可以关注我的微信公众号:iwork,我会每天推送一篇原创文章,让大家都能有所收获!