• PHP-正则表达式


    0x01正则表达式作用

    • 用于匹配、替换、截取匹配的字符串

    0x02匹配原则

    • 最左原则:从目标字符串的最左侧开始,依次匹配
    • 最长原则:正则表达式总是会匹配到符合正则表达式要求最长的部分,即贪婪模式

    0x03 分割符

    正则表达式的开始和结尾
    /
    #
    ~

    /需要转义,#不需要转义

    <?php
    
    $str = 'http://www.baidu.com';
    $pattern = '/http://.*com/';//需要转义
    preg_match($pattern,$str,$match);
    var_dump( $match);
    
    ?>
    
    array(1) {
      [0]=>
      string(20) "http://www.baidu.com"
    }
    
    <?php
    
    $str = 'http://www.baidu.com';
    $pattern = '#http://.*com#';//不需要转义
    preg_match($pattern,$str,$match);
    var_dump( $match);
    
    ?>
    
    array(1) {
      [0]=>
      string(20) "http://www.baidu.com"
    }
    
    

    0x04正则表达式中包含的元素

    • 原子(普通字符:a-z A-Z 0-9、原子表、转义字符)
    • 元字符(有特殊功能的字符)
    • 模式修正符(系统内置部分字符)

    1、转义字符

    d  包含所有数字[0-9]
    D  除所有数字外[^0-9]
    w  包含所有字符(大小写英文字母、下划线、数字)[a-zA-Z_0-9]
    W  除所有字符(大小写英文字母、下划线、数字)外[^a-zA-Z_0-9]
    s  空白区域如回车、换行、分页等[f
    
    ]
    S  非空白区域如回车、换行、分页等[^f
    
    ]
    
    //显示不可打印的字符
    a  报警
      退格
    f  换页
    
      换行
    
      回车
    	  制表符
    
    

    2、元字符

    .  匹配任意次(不包括回车换行)
    *  匹配任意次
    ?  匹配0次或1次
    +  匹配1次或多次
    |  选择匹配(或)
    ^  匹配开头(方括号中表示非)
    $  匹配尾部
    {m}  匹配前一个内容重复m次
    {m,}  匹配前一个内容重复次数大于等于m次
    {m,n}  匹配前一个内容的重复次数m次到n次
    ()   合并整体匹配  
    
    

    3、模式修正符

    i  不区分大小写
    m  匹配首内容或尾内容时采用多行识别匹配
    s  将转义回车取消视为单行匹配
    x  忽略正则中的空白
    A  强制从头开始匹配
    D  强制$匹配尾部无任何内容
    U  进制贪婪匹配,只跟踪到最近的一个匹配符并结束
    u  匹配中文
    
    

    0x05 例

    1、单词界定符:
    
    <?php
    
    $str="tom and bob";
    $pattern='/an/';
    preg_match($pattern, $str,$match);
    var_dump($match);
    
    array(1) {
      [0]=>
      string(2) "an"
    }
    ?>
    
    <?php
    
    $str="tom and bob";
    $pattern='/an/';
    preg_match($pattern, $str,$match);
    var_dump($match);
    
    array(0) {
    }
    ?>
    and是一个完整的单词。
    修改pattern='/an/'
    用于保证必须是一个完整单词才能匹配成功
    B表示不用是一个完整单词
    
    
    2、选择字符 | (或)
    
    Aa|aA 表示Aa或者aA
    []  只能匹配单个字符
    |   可以匹配任意长度的字符串
    -   [a-d] a或者b或c或者d
    
    3、排除字符
    
    [^a-z] 排除小写字母
    
    4、括号字符()
    
    改变限定符(| * ^)的作用范围
    (aa|bb)cc  匹配aacc或者bbcc
    aa|bbcc    匹配aa或者bbcc
    
    5、
    
    表示第n次匹配到的结果
    
    6、+
    "ab*"  0个或者更多b,("a","ab","abbb")
    "ab+"  至少一个b,("ab","abb")
    
    7、
    "a?b+$"  匹配一个或0个a加上至少一个b结尾的字符串
    "ab{2}"  匹配一个a加上后面2个b
    "a(bc)*" 匹配一个a加上0个或者一个bc
    "a.[0-9]" 匹配一个a加上一个字符再加上一个数字
    
    

    参考链接:
    https://www.php.cn/php-weizijiaocheng-394075.html
    https://www.cnblogs.com/hellohell/p/5718319.html
    https://www.cnblogs.com/rxbook/p/10912829.html
    https://www.cnblogs.com/furuihua/p/12187412.html

  • 相关阅读:
    smartFoxClinet客户端官方中文Doc
    testTrycatch和catch中的应用程序恢复
    这几天做仿豆丁网flash文档阅读器,百度文库阅读器经验总结
    怎么通过生成动态对象名来调用一个对象?
    AS3的Number类型变量不指定初始值,则其初始值为NaN,而不是0.0
    最适合女生的五大紧缺游戏开发职位
    [阻塞和非阻塞]
    网络游戏客户端的日志输出
    我心目中的MMO
    和某游戏猎头的对话
  • 原文地址:https://www.cnblogs.com/observering/p/12837241.html
Copyright © 2020-2023  润新知