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

一、正则表达式语法规则
描述了一类字符串的特征,然后通过这个特征可以配合一些特定的函数,来完成对字符串更加复杂的一系列操作! 
普通字符和特殊字符组成的一个字符串
         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));




            






         












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值