• 技术文章 >后端开发 >php教程

    让人心动的PHP的正则表达式基础(图例详解)

    长期闲置长期闲置2021-10-18 14:34:04原创356
    在之前的文章中给大家带来了《学会使用PHP的List、each函数及配合》,主要讲解了应该如何使用list函数和each函数以及两者之间应该怎样配合使用,相信大家已经掌握的差不多了,那么本篇文章我们一起来看一看PHP中的正则表达式。希望对大家有帮助!

    正则表达式是一种逻辑公式,是用一开始声明好的一些字符还有这些字符的组合,组成的一个“规定字符串”,这个规定字符串其实就是用来过滤字符串的,可以理解为我们在登陆用户的时候有时会要填写验证码或者电话之类的这些特定的数据,这时候就要用到正则表达式。

    正则表达式虽然看起来复杂,其实并不难,那接下来我们一起来看一看吧。

    正则表达式的定界符

    首先我们要学习的就是正则表达式的定界符,顾名思义,定界符就是确定正则表达式边界的符号,定一个边界,边界以内就是正则表达式。同时正则表达式的定界符有规定:

    示例如下:

    $正则表达式$
    %正则表达式%
    /正则表达式/

    其中我们需要注意的是/是转义字符,当我们正则中需要匹配/的时候,可以使用\转义一下。如果觉得麻烦的话,可以直接使用其他的定界符比如:

    $/$

    正则表达式的原子

    正则表达式的原子是正则表达式里的最小单位,也就是我们需要匹配的内容,在我们成立的整形额表达式中,最少也要有一个原子。

    其实可以理解为,所有可见的不可见的字符都是原子,比如空格、回车、换行、0-9、标点符号、A-Za-z、中文这些都是原子。

    preg_match() 函数

    在详细的讲原子之前,我们要先了解一下一个函数,那就是preg_match

    PHP 中的 preg_match() 函数可以根据定义的正则表达式对字符串进行搜索以及匹配。

    语法格式如下:

    preg_match ( string $正则 , string $字符串 [, array &$结果] )

    根据$正则也就是我们定义的正则表达式,在匹配$字符串,如果存在则返回匹配个数,然后把匹配的结果放在$结果里。如果没有匹配到结果那就返回0。

    我们通过示例来看一下:

    <?php
    //定义一个变量叫a,作为我们定义的正则表达式。
    $a = '/a/';
    $b = 'abbcccddddeeeee';
    if(preg_match($a, $b, $c)){
       echo '匹配到了,结果为:';
       var_dump($c);
    }else{
       echo '没有匹配到';
    }
    ?>

    输出结果:

    1018.09.png

    由上述示例可以看出,我们定义了变量a,希望能够匹配的是a,正好在$b中存在a,通过if else语句输出成功了。

    再来一个示例:

    <?php
    //定义一个变量叫a,作为我们定义的正则表达式。
    $a = '/fff/';
    $b = 'abbcccddddeeeee';
    if(preg_match($a, $b, $c)){
       echo '匹配到了,结果为:';
       var_dump($c);
    }else{
       echo '没有匹配到';
    }
    ?>

    输出结果:

    1018.11.png

    上述示例中,希望匹配到字符串,但是$b中不存在,所以没有匹配成功,通过if else语句输出为匹配成功。

    知道了preg_match() 函数的基本用法之后我们可以和特殊标识的原子结合起来使用。

    特殊标识的原子

    它们的具体用法给大家举个例子就明白了:

    <?php
    $a = '/\d/';
    $b = '人生自古谁无4';
    if(preg_match($a, $b, $c)){
       echo '匹配到了,结果为:';
       var_dump($c);
    }else{
       echo '没有匹配到';
    }
    ?>

    输出结果:

    1018.12.png

    在上述示例中,特殊标识的原子\d表示的就是0-9的数字,那么在需要匹配的$b中存在一个4,所以匹配成功。

    <?php
    $a = '/\w/';
    $b = '人生自古谁无死';
    if(preg_match($a, $b, $c)){
       echo '匹配到了,结果为:';
       var_dump($c);
    }else{
       echo '没有匹配到';
    }
    ?>

    输出结果:

    1018.13.png

    在上述实例中,特殊标识的原子\w表示的是a-zA-Z0-9_ ,在变量b中没有相应的元素,所以输出结果为未匹配到。

    其中还有一个[^]字符表示不匹配指定区间的字符。

    示例如下:

    <?php
    $a = '/[^0-9A-Za-z_]/';
    $b = 'abbccc122333';
    if(preg_match($a, $b, $c)){
       echo '匹配到了,结果为:';
       var_dump($c);
    }else{
       echo '没有匹配到';
    }
    ?>

    输出结果:

    1018.14.png

    通过[^]字符匹配除0-9A-Za-z_以外的字符,未匹配到。

    总结一下:

    正则表达式的元字符

    在上面的示例中,我们能够看出通过匹配的话,只能匹配一个字符,但是在我们的日常使用中,通常会匹配多个字符,那这时候只通过我们的原子就不能达到我们的目的。就需要通过元字符来帮我们修饰原子,实现更多的功能。

    接下来我们通过一些例子来实例看一下这些元字符的使用:

    <?php
    $a = '/\d+/';
    $b = "爱你10000年";
    if(preg_match($a, $b, $c)){
       echo '匹配到了,结果为:';
       var_dump($c);
    }else{
       echo '没有匹配到';
    }
    ?>

    输出结果:

    1018.15.png

    通过元字符+的添加,匹配到了多次字符,\d+中d是匹配数字,+则表示最少匹配一次前面的字符。

    正则表达式的模式修正符

    通过原子和元字符的了解,我们已经完成了正则表达式的入门,但是这仍然不能代表正则表达式的真正实力,如果我们只希望正则表达式匹配一部分应该怎么办?有些特殊情况依然需要处理,这时候我们就要用到正则表达式的模式修正符。

    下面列举一些常用的模式修正符:

    它的用法如下:

    /正则表达式/模式修正符

    接下来我们通过一些实例来看一下它的使用:

    <?php  
        $a = '/ABC/i'; 
    $b = '8988abc12313';
    $c = '11111ABC2222'; 
    if(preg_match($a, $b, $d)){
         echo '匹配到了,结果为:'; 
        var_dump($d); }else{
         echo '没有匹配到';
         }
     ?>

    输出结果:

    1018.16.png

    i可以让匹配的时候同时匹配大小写,那么接下来把匹配的$b换成$c试一下,我们看一下输出结果:

    <?php  
        $a = '/ABC/i'; 
    $b = '8988abc12313';
    $c = '11111ABC2222'; 
    if(preg_match($a, $c, $d)){
         echo '匹配到了,结果为:'; 
        var_dump($d); }else{
         echo '没有匹配到';
         }
     ?>

    输出结果:

    1018.17.png

    推荐学习:《PHP视频教程

    以上就是让人心动的PHP的正则表达式基础(图例详解)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:PHP 正则表达式
    上一篇:学会使用PHP的List、each函数及配合 下一篇:详细分析PHP中怎样定义颜色、绘制点、线和矩形?
    大前端线上培训班

    相关文章推荐

    • 如何玩转PHP自定义函数(总结分享)• 快看!能让PHP程序加速的好东西“Roadrunner”来了!• 五分钟读懂PHP匿名函数(实例详解)• php怎么替换图片链接• php怎么设置警告等级• php获取时间对不上怎么办

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网