php笔记----第七章 正则表达式

来源:互联网 发布:网络彩票概念股龙头 编辑:程序博客网 时间:2024/05/02 02:13
一、正则表达式语法规则
描述了一类字符串的特征,然后通过这个特征可以配合一些特定的函数,来完成对字符串更加复杂的一系列操作! 
普通字符和特殊字符组成的一个字符串
         print_r($matches);
二、定界符
我们一般习惯使用正斜线"/"作为定界的字符,前后一致


三、普通字符
四、元字符
\d 匹配任意一个十进制数字,等价于[0-9]
\D 匹配任意一个除十进制数字以外字符,等价于[^0-9]
\s 匹配任意一个空白字符,比如换页符、换行符、回车符、制表符、垂直制表符
\S 匹配除空白字符以外的任何一个字符
\w 匹配任意一个数字或字母或下划线
\W 匹配除数字、字母、下划线以外的任意一个字符
. 匹配除换行符以外的任意一个字符

* 匹配0次、或1次、或多次其前面的字符
+ 匹配1次或多次其前面的字符
? 匹配0次或1次其前面的字符
{n} 表示其前面字符恰好出现n次
{n,} 表示其前面字符出现不少于n次
{n,m} 表示其前面的字符至少出现n次,最多出现m次

^或\A 匹配字符串开始位置
$或者\Z 匹配字符串的结束位置

| 匹配两个或多个模式

[] 匹配方括号中的任意一个字符
[^] 匹配除方括号中字符以外的任意一个字符

() 将括号中作为一个整体以便将其中的内容获取到
在我们的正则表达式中 可以使用圆括号来将某一段括起来,在圆括号的后面部分,我们可以使用
\\数字 来代表圆括号部分所匹配到的内容!
         举例:
         //         \d 匹配任意一个十进制数字,等价于[0-9]
         $patt="/t\dst/";
         $myString ="zhongguorent0stzhongguorentest";
         var_dump(preg_match_all($patt, $myString, $matches));
         var_dump($matches);




         //       只想匹配普通的.(点)
         //       \转义字符,把原来正则表达式的.(点)转成了普通的.(点)
         $patt="/t\.st/";
         $myString ="zhong.guorent0stzhongguorentest";
         var_dump(preg_match_all($patt, $myString, $matches));
         var_dump($matches);


         //* 匹配0次、或1次、或多次其前面的字符
         $patt="/te*st/";
         $myString ="zhteeeest";
         var_dump(preg_match_all($patt, $myString, $matches));
         var_dump($matches);


         //+ 匹配1次或多次其前面的字符
         $patt="/te+st/";
         $myString ="zhteeeest";
         var_dump(preg_match_all($patt, $myString, $matches));
         var_dump($matches);


         //? 匹配0次或1次其前面的字符 
         $patt="/te?st/";
         $myString ="zhtst";
         var_dump(preg_match_all($patt, $myString, $matches));
         var_dump($matches);


         //{n} 表示其前面字符恰好出现n次
         $patt="/te{2}st/";
         $myString ="zhteest";
         var_dump(preg_match_all($patt, $myString, $matches));
         var_dump($matches);


         //{n,} 表示其前面字符出现不少于n次
         $patt="/te{2,}st/";
         $myString ="zhtest";
         var_dump(preg_match_all($patt, $myString, $matches));
         var_dump($matches);


         //{n,m} 表示其前面的字符至少出现n次,最多出现m次
         $patt="/te{2,5}st/";
         $myString ="zhteeest";
         var_dump(preg_match_all($patt, $myString, $matches));
         var_dump($matches);


         //.与{n}的配合
         $patt='/t.{3}st/'; //t...st
         $myString ="zhteeest";
         var_dump(preg_match_all($patt, $myString, $matches));
         var_dump($matches);


                 
          //.与{*}配合
         $patt='/t.*st/'; //tst
         $myString ="zhtst";
         var_dump(preg_match_all($patt, $myString, $matches));
         var_dump($matches);




         //.与{*}配合
         //贪婪匹配         
         $patt='/t.*st/'; //tst
         $myString ="zhteeestdddtmmmst";
         var_dump(preg_match_all($patt, $myString, $matches));
         var_dump($matches);


         //.与{*}配合
         //加?指的是懒惰匹配         
         $patt='/t.*?st/'; //tst
         $myString ="zhteeestdddtmmmst";
         var_dump(preg_match_all($patt, $myString, $matches));
         var_dump($matches);


 
         //          ^或\A 匹配字符串开始位置
         $patt='/^test/'; //tst
         $myString ="testdddtmmmst";
         var_dump(preg_match_all($patt, $myString, $matches));
         var_dump($matches);


          
         //           $或者\Z 匹配字符串的结束位置
            $patt='/test$/'; //test
            $myString ="testdddtmmmtest";
            var_dump(preg_match_all($patt, $myString, $matches));
            var_dump($matches);


        
        //          .和$ 配合使用
            $patt='/^t.*t$/'; //test
            $myString ="testdddtmmmtest";
            var_dump(preg_match_all($patt, $myString, $matches));
            var_dump($matches);


                    
       // | 匹配两个或多个模式
            $patt='/test|abc|AAA/'; 
            $myString ="dddttestmabcmAAAm";
            var_dump(preg_match_all($patt, $myString, $matches));
            var_dump($matches);


      // [] 匹配方括号中的任意一个字符
            $patt='/t[abcde]st/'; 
            $myString ="dddttestmatastbcmAAAm";
            var_dump(preg_match_all($patt, $myString, $matches));
            var_dump($matches);


      //[^] 匹配除方括号中字符以外的任意一个字符
            $patt='/t[^e]st/'; 
            $myString ="dddttestmatastbcmAAAm";
            var_dump(preg_match_all($patt, $myString, $matches));
            var_dump($matches);




//           () 将括号中作为一个整体以便将其中的内容获取到
//    在我们的正则表达式中 可以使用圆括号来将某一段括起来,在圆括号的后面部分,我们可以使用
//          数字 来代表圆括号部分所匹配到的内容!
            $patt='/t(e)st\\1/'; //\\1代表一地个圆括号部分所匹配到的内容'/teste/'
            $myString ="teste";
            var_dump(preg_match_all($patt, $myString, $matches));
            var_dump($matches);


         
//           () 将括号中作为一个整体以便将其中的内容获取到
//    在我们的正则表达式中 可以使用圆括号来将某一段括起来,在圆括号的后面部分,我们可以使用
//          数字 来代表圆括号部分所匹配到的内容!
            $patt='/t(.)(.)t\\1\\2/'; //\\1代表一地个圆括号部分所匹配到的内容'/teste/'
            $myString ="testes";
            var_dump(preg_match_all($patt, $myString, $matches));
            var_dump($matches);
           


五、模式修正符
常见模式修正符
i 在和模式进行匹配时不区分大小写
m 多行匹配,如果目标字符串 中没有"\n"字符, 或者模式中没有出现^或$, 设置这个修饰符不产生任何影响
s 如果设定了此修正符,那么.将匹配所有的字符包括换行符
U 禁止贪婪匹配




//       i 在和模式进行匹配时不区分大小写   
         $patt='/test/i';
         $myString ="test Test TEST tEst";
         var_dump(preg_match_all($patt, $myString, $matches));
         var_dump($matches);






//       多行匹配,如果目标字符串 中没有"\n"字符, 或者模式中没有出现^或$, 设置这个修饰符不产生任何影响
//       使用条件:
//       1目标字符串中必须包含"\n",在字符串中出现"\n"表示新的一行开始
//       2正则表达式中必须出现^或者$


                  $patt='/^test/m';
         $myString ="test\ntest\ntest\ntest";
//         这种写法是换行是不起作用的
//         因为在windows操作系统下你所看到的换行现象其实是由(\r\n)来完成的
//           $myString ="test"
//                   . "test"
//                   . "test"
//                   . "test";
         var_dump(preg_match_all($patt, $myString, $matches));
         var_dump($matches);




//       s 如果设定了此修正符,那么.将匹配所有的字符包括换行符
         $patt='/t.st/s';
         $myString ="t\nst";
         var_dump(preg_match_all($patt, $myString, $matches));
         var_dump($matches);






//        U 禁止贪婪匹配
         $patt='/t.*t/U'; //等价于$patt='/t.*?t/';
         $myString ="tkoijihuygyt  tjojot";
         var_dump(preg_match_all($patt, $myString, $matches));
         var_dump($matches);


//       模式修正符,可以多个使用,顺序没关系
         $patt='/t.*t/iU'; //等价于$patt='/t.*?t/';
         $myString ="TKoijihuygyt  tjojot";
         var_dump(preg_match_all($patt, $myString, $matches));
         var_dump($matches);
           




六、与正则表达式配合的函数


         preg_match_all()
//       preg_match_all() 函数用于进行正则表达式全局匹配,成功返回整个模式匹配的次数(可能为零),如果出错返回 FALSE 。
         $patt="/test/";
         $myString ="zhtest";
         var_dump(preg_match_all($patt, $myString, $matches));






        preg_match()
        preg_match() 函数用于进行正则表达式匹配,成功返回 1 ,否则返回 0 。
            $patt='/t(.*?)st/'; 
            $myString ="test teeeeest ";
            var_dump(preg_match($patt, $myString, $matches));
            var_dump($matches);




       preg_replace() 函数用于正则表达式的搜索和替换。
            $patt='/<div>(.*?)<\/div>/'; 
            $str1= "<a>$1</a>";
            $myString ="t<div>estteeeee</div>st ";
            var_dump(preg_replace($patt, $str1, $myString));




常用正则表达式:
//1匹配邮箱
$str = '584816642@qq.com';
$isMatched = preg_match('/\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/', $str, $matches);
var_dump($isMatched, $matches);
     
//2匹配手机号
$str = '13012870395';
$isMatched = preg_match('/(13\d|14[57]|15[^4,\D]|17[678]|18\d)\d{8}|170[059]\d{7}/', $str, $matches);
var_dump($isMatched, $matches);


//匹配整份证号
$str = '610321199111113411';
$isMatched = preg_match('/\d{15}|\d{17}[0-9Xx]/', $str, $matches);
var_dump($isMatched, $matches);  


//匹配车牌号
$patt="/[\x80-\xff]+[A-Z][0-9a-zA-Z]{5}/";
$myString ="陕A88888";
var_dump(preg_match_all($patt, $myString, $matches));




            






         












0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果手机ld锁了怎么办 苹果手机ld被锁怎么办 苹果6太卡了怎么办 东风31泄密案该怎么办 小孩子眼睛近视怎么办才能好起来 u盘丢了没有加密怎么办 公司u盘丢了怎么办 掏耳朵后耳朵痛怎么办 辐射4基地被攻击怎么办 宝珀50噚表带大怎么办 颈如何部皱纹多怎么办 cvt变速箱油少了怎么办 上膛疼 咽唾沫疼怎么办 大便把马桶堵了怎么办 马桶堵了怎么办最简单 马桶堵的水满了怎么办 直冲式马桶堵了怎么办 天梭手表不走了怎么办 机械表老是快该怎么办 机械表有误差 那怎么办 机械表走的快怎么办 新车加了燃油宝怎么办 车离合器片烧了怎么办 车的离合片烧了怎么办 鱼缸没电了缺氧怎么办 水箱的浮球失灵怎么办 鱼缸底滤停电1天怎么办 底滤鱼缸声音大怎么办 马桶提升泵坏了怎么办 汽车前玻璃起雾怎么办 下雨车玻璃起雾怎么办 车玻璃外面起雾怎么办 汽车内玻璃起雾怎么办 汽车前挡风起雾怎么办 车窗内玻璃起雾怎么办 早晨车玻璃起雾怎么办 开空调玻璃起雾怎么办 吹空调闭汗了怎么办 空调吹久了头疼怎么办 吹热空调还头疼怎么办 空调吹多了头痛怎么办