zoukankan      html  css  js  c++  java
  • php 正则表达式

    • 基础
    1. 开始符和结束符:/;
    2. 特殊字符 包括(/、);
    3. 或用(|)或者[ ]表示。区别:(I)可匹配多个字符,如(ansnj|cmxc)。[]可匹配单个字符,如[a-z0-9],表示匹配a到z中或者0到9中的任意一个字符。
    4. 非用^表示,一般和[]连用,如[^a-b]表示匹配除了a到z之外的任意一个字符,[abc^]则表示匹配a|b|c|^;
    5. 表示重复次数{n,m} , * , ? , + 。如[a-b]{1,2}表示匹配到aa|ab|ba|bb四种可能,*表示重复次数为0次或者多次,?表示0或一次,+表示一次货多次;
    6. .表示除换行符外的任意字符
    7. f  匹配一个换页符。等价于 x0c 和 cL。
       匹配一个换行符。等价于 x0a 和 cJ。
       匹配一个回车符。等价于 x0d 和 cM。
      s  匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ f v]。
      S  匹配任何非空白字符。等价于 [^ f v]。
       匹配一个制表符。等价于 x09 和 cI。
      v  匹配一个垂直制表符。等价于 x0b 和 cK。
    • 注意
    1. /和在正则表达式中都需要用转义。
    2. 如果要匹配以上描述的任意字符都需要用转义,如要匹配一个+号,就需要写为+;
    3. 需要与以上描述的任意字符连用都需要转义,如/\[h-i]/则匹配的字符串为h或者i;
    4. [^] 这样的连用是错误,若想匹配^,则用^表示,但[a^]则可以表示a或者^中的其中一个字符。
    5. 贪婪匹配:/.*+/ 使正则表达式尽可能的匹配多的字符
      惰性匹配:/.*?/ 使正则表达式尽可能少的匹配字符
      元字符包含 [] () ^ $ ~ . ? + * - | {} 需要匹配本体时需要转义(加)
      常用的转义字母 : d (0-9) D (任意非十进制字符) w (任意字母和数字和下划线) W(任意非字母和非数字和非下划线) (换行符) (回车) (水平制表符) f (换页)

    • 例子分析
    /*  
     * 邮件匹配 分三部分 @前为一个整体 @后到.为一个整体 .之后为一个整体
     * part1 : 至少有一个字母或数字或下划线(即 w) 由 -或者.或者+ 拼接的 一或多部分 可得正则为 w+([.-+]w+)*
     * 如 :123-11+33_.aa
     * part2 : 与part1相似,但没有+号的连接符 w+([.-]w+)*
     * 如:123-11.cn
     * part3 :与part2一致 w+([.-]w+)*
     * 如: com.cn
     * */
    /* $pattern = '/^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$/';
    $subject = '925224611@qq.com';
    $subject = '192-168-1-0-1@qq.com';
    $subject = '192*168+1.0-1@qq.com';
    $res = preg_match($pattern, $subject , $arr_data);
    
    var_dump($res);
    echo '<pre>'; print_r($arr_data);  */
    
    $pattern = '/^[w-]$/';
    $subject = '925224611@qq.com';
    $subject = '192-168-1-0-1@qq.com';
    $subject = '192*168+1.0-1@qq.com';
    $subject = '-';
    $res = preg_match($pattern, $subject , $arr_data);
    
    var_dump($res);
    echo '<pre>'; print_r($arr_data);
    
    /* 
     * 网站地址由三部分组成:
     * part1 : 是一个固定的部分 http(s)?://
     * part2 : 是域名部分(至少两级域名)  ([w-]+.)+[w-]+
     * part3 : 其他路径和参数部分 (/[w-/?=&%]*)?
     *  */
    
    $pattern = '/^http(s)?://([w-]+.)+[w-]+(/[w-./?%&=]*)?$/';
    $subject = 'http://192.168.0.1/erp/index.php/Home/WlZj/tableList.html?&draw=1&columns%5B0%5D%5Bdata%5D=&columns%5B0%5D%5Bname%5D=&columns%5B0%5D%5Bsearchable%5D=true&columns%5B0%5D%5Borderable%5D=false&columns%5B0%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B0%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B1%5D%5Bdata%5D=hh&columns%5B1%5D%5Bname%5D=&columns%5B1%5D%5Bsearchable%5D=true&columns%5B1%5D%5Borderable%5D=true&columns%5B1%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B1%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B2%5D%5Bdata%5D=quarter&columns%5B2%5D%5Bname%5D=&columns%5B2%5D%5Bsearchable%5D=true&columns%5B2%5D%5Borderable%5D=true&columns%5B2%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B2%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B3%5D%5Bdata%5D=aunit&columns%5B3%5D%5Bname%5D=&columns%5B3%5D%5Bsearchable%5D=true&columns%5B3%5D%5Borderable%5D=true&columns%5B3%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B3%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B4%5D%5Bdata%5D=confnum&columns%5B4%5D%5Bname%5D=&columns%5B4%5D%5Bsearchable%5D=true&columns%5B4%5D%5Borderable%5D=false&columns%5B4%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B4%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B5%5D%5Bdata%5D=status&columns%5B5%5D%5Bname%5D=&columns%5B5%5D%5Bsearchable%5D=true&columns%5B5%5D%5Borderable%5D=false&columns%5B5%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B5%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B6%5D%5Bdata%5D=&columns%5B6%5D%5Bname%5D=&columns%5B6%5D%5Bsearchable%5D=true&columns%5B6%5D%5Borderable%5D=false&columns%5B6%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B6%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B7%5D%5Bdata%5D=remark&columns%5B7%5D%5Bname%5D=&columns%5B7%5D%5Bsearchable%5D=true&columns%5B7%5D%5Borderable%5D=false&columns%5B7%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B7%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B8%5D%5Bdata%5D=&columns%5B8%5D%5Bname%5D=&columns%5B8%5D%5Bsearchable%5D=true&columns%5B8%5D%5Borderable%5D=false&columns%5B8%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B8%5D%5Bsearch%5D%5Bregex%5D=false&order%5B0%5D%5Bcolumn%5D=1&order%5B0%5D%5Bdir%5D=desc&start=0&length=10&search%5Bvalue%5D=&search%5Bregex%5D=false&_=1560409514623';
    
    //$subject = 'https://www.baidu.com/s?ie=UTF-8&wd=%E7%99%BE%E5%BA%A6';
    
    //$path = '/^http(s)?://([w-].)+([w-])+(/[w./?-=&%]*)?$/';
    $res = preg_match($pattern, $subject , $arr_data);
    
    var_dump($res);
    echo '<pre>'; print_r($arr_data); 
  • 相关阅读:
    优化SQL查询:如何写出高性能SQL语句
    提高SQL执行效率的16种方法
    Spring Ioc DI 原理
    java内存泄漏
    转:js闭包
    LeetCode Best Time to Buy and Sell Stock III
    LeetCode Best Time to Buy and Sell Stock with Cooldown
    LeetCode Length of Longest Fibonacci Subsequence
    LeetCode Divisor Game
    LeetCode Sum of Even Numbers After Queries
  • 原文地址:https://www.cnblogs.com/Acsii/p/8205747.html
Copyright © 2011-2022 走看看