zoukankan      html  css  js  c++  java
  • PHP中的正则表达式的使用

    PHP中的正则表达式基础知识
    1.正则表达式就是描述字符串排列模式的一种自定义语法规则
    2.如果可以使用字符串处理函数完成的任务,就不使用正则表达式
    3.有一些复杂的操作,只能使用正则表达式完成
    4.正则表达式也称为一种模式表达式
    5.正则表达式就是通过构建具有特定规则的模式,与输入的字符信息比较,在进行分割、匹配、查找、替换等工作
        例:"/<imgs*src=".*?"/>/"
            a.正则表达式也是一个字符串
            b.由具有特殊意义的字符串组成的字符串
            c.具有一定编写规则,也是一种模式
            d.看作是一种编程语言(是用一些特殊字符,按规则编写出一个字符串,形成一种模式---正则表达式)

            注意:如果正则表达式,不和函数一起使用,则它就是一个字符串,只有将正则表达式放到某个函数中使用,才能发挥出正则表达式的作用。
        

        在PHP中给我们提供两套正则表达式函数库
        POSIX扩展正则表达式函数库
        Perl兼容正则表达式函数库

        这两个函数功能一样,找一个处理字符串效率高的
        注意:由于功能一样,所以推荐使用Perl兼容正则表达式函数库

    正则表达式的模式如何编写
        例:"/<imgs*src=".*?"/>/iU"
        语法:
            1.定界符  //
                    除了字母、数字和正斜线以外的任一字符都可以是定界符
                    | |
                    / /
                    { }
                    ! !
                    我们一般使用//
            2.原子。 img s .
                注意:原子是正则表达式的最基本组成单位,而且必须至少要包含一个原子
                只要一个正则表达式可以单独使用的字符,就是原子

                1.所有打印(所有可以用键盘在屏幕上输出的字符串)和非打印字符(看不到的)
                2.* + ? ( . < 如果所有有意义的字符,想要作为原子使用,统统使用“”转义字符转义
                    在无特殊意义的字符前使用转义字符时还是把它看成普通字符来看
                    转义字符可以将有意义的字符转成没意义的字符,还可以将没意义的字符转成有意义的字符    
                3.在正则表达式中可以直接使用一些代表范围的原子
                    d  :表示任意一个十进制的数字  [0-9]
                    D  :表示任意一个除了数字外的字符   [^0-9]
                    s  :表示任意一个空白字符。空格、 f  [ f ]
                    S  :表示任意一个非空白字符     [^ f ]
                    w  :表示任意一个字。a-zA-Z0-9_     [a-zA-Z0-9_]
                    W  :表示任意一个非字。除了a-zA-z0-9_     [^a-zA-Z0-9_]
                4.自己定义一个原子表[],可以匹配方括号中的任何一个原子
                    例:[0-5p-z]
            3.元字符  * ?
                元字符是一种特殊的字符,是用来修饰原子用的,不可以单独使用
                *   :表示其前面原子可以出现的次数 0次、1次、或多次      {0,}
                +   :表示其前面的原子出现1次或多次,不能没有至少一次    {1,}
                ?   :表示其前面的原子出现0次或1次,有只能一次,要么没有   {0,1}
                {}  :用于自己定义前面的原子出现的次数
                            {m}    m表示一个整数, {5}表示前面的原子出现5次
                            {m,n}  m和n表示整数,{2,5}表示前面的原子出现2-5次
                            {m,}   表示前面的原子至少出现m次
                .   :默认情况下,表示除换行符外的任意一字符
                ^   :直接在一个正则表达式的第一个字符出现,则表示字符串必须以这个正则表达式开始
                $   :直接在一个正则表达式的最后字符出现,则表示字符串必须以这个正则表达式结尾
                |   :表示或的关系,它的优先级是最低的,最后考虑它
                  :表示一个边界
                B  :表示一个非边界
                重点  ()  :
                        1.()作用:是作为大原子使用
                        2.改变优先级
                        3.作为子模式使用,正则表达式不光对一个字符串匹配一次,全部匹配作为一个大模式,放在数组的第一个元素中,每个()是一个子模式按顺序放到数组的其他元素中去
                        4.可以取消子模式,就将()作为大原子或改变优先级使用,在大括号中最前面使用?:就可以取消这个()表示的子模式
                        5.反向引用,可以在模式中直接将子模式取出来,再作为正则表达式模式的一部分,如果是在正则表达式像替换函数preg_replace函数中,可以将子模式取出,在被替换的字符串中使用
                            1取第一个子模式  2取第二个子模式。。。。。

    <?php
    $pattren="/((?:d{4})Wd{2}Wd{2})s+((d{2})Wd{2}Wd{2})s+(am|pm)/";
    $string="today is 2016-08-09 15:30:00 pm...";
    if(preg_match($pattren,$string,$arr)){
        echo "正则表达式<b>{$pattren}<b>和字符串<b>{$string}<b>匹配成功<br>";
        echo '<pre>';
        print_r($arr);
        echo '</pre>';
    }else{
        echo "<font color='red'>正则表达式{$pattren}和字符串{$string}匹配失败</font>";
    }
    ?>


            4.模式修正符号 i u
                "//模式修正符号"
                1.可以一次使用一个,每一个都具有一定的意义,也可以连续使用多个
                2.是对整个正则表达式的调优使用,也可以说是对正则表达式功能的扩展

                例;"/abc/"   只能匹配小写字母 abc
                    "/abc/i"   可以不区分大小写的匹配


                i :表示在和模式进行匹配时不区分大小写
                m :默认情况下,PCRE 将目标字符串作为单一的一“行”字符所组成的(甚至其中包含有换行符也是如此)。“行起始”元字符(^)仅仅匹配字符串的起始,“行结束”元字符($)仅仅匹配字符串的结束,或者最后一个字符是换行符时其前面(除非设定了 D 修正符)
                    当设定了此修正符,“行起始”和“行结束”除了匹配整个字符串开头和结束外,还分别匹配其中的换行符的之后和之前。这和 Perl 的 /m 修正符是等效的。如果目标字符串中没有“ ”字符或者模式中没有 ^ 或 $,则设定此修正符没有任何效果
                s :如果没有使用这个模式修正符时,元字符中的“.”就不能匹配换行符,使用后就可以了。
                x :表示模式中的空白忽略不计
                e : 如果设定了此修正符,preg_replace() 在替换字符串中对逆向引用作正常的替换,将其作为 PHP 代码求值,并用其结果来替换所搜索的字符串。
                    只有 preg_replace() 使用此修正符,其它 PCRE 函数将忽略之。
                A :如果设定了此修正符,模式被强制为“anchored”,即强制仅从目标字符串的开头开始匹配。此效果也可以通过适当的模式本身来实现
                Z :
                U :本修正符反转了匹配数量的值使其不是默认的重复,而变成在后面跟上“?”才变得重复。这和 Perl 不兼容。也可以通过在模式之中设定 (?U) 修正符或者在数量符之后跟一个问号(如 .*?)来启用此选项。

            /原子核元字符/模式修正符号         /为定界符

  • 相关阅读:
    Seven ways to improve example-based single image super resolution【阅读笔记】
    Perceptual Losses for Real-Time Style Transfer and Super-Resolution【阅读笔记】
    Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network【ESPCN】【阅读笔记】
    Image Super-Resolution Using Deep Convolutional Networks【SRCNN】【阅读笔记】
    CAD绘制剖面图的详细步骤和方法
    【场景编辑工具】如何快速在倾斜模型上添加人工模型完成场景搭建?
    【工具分享】DEM高程数据爬取工具
    河长制方案优化
    根据三个点的坐标计算其夹角
    Shell脚本中大小关系判断[大于、小于、等于、不等于...]
  • 原文地址:https://www.cnblogs.com/Y-HKL/p/5356482.html
Copyright © 2011-2022 走看看