zoukankan      html  css  js  c++  java
  • 闲来总结一下正则


    自我总结的正则难点

    1.正则符号 . 需要转义 | 限制符号 等等

    2.用#做定界符时对/不转义

    3.修饰符号:用于改变正则表达式的行为
    (1)i代表忽略大小写
    (2)x忽略空格
    (3)
    4.^脱字符号
    (1)^放在字符域中(如:[^w])表示不包括的意思
    (2)放在字符的前面表示以这个字符开始
    5.通配符
    (1)正向预查:(?=)相对应的(?!)表示否定意思
    (2)反向预查:(?<=)相对应的(?<!)表示否定意思
    前后紧跟字符

    预查:对字符串前后的字符规则加限制
    正向预查:
    $regex = '/(?<=c)d(?=e)/';
    $str = 'abcdefg';
    if (preg_match($regex,$str,$matchs)) {
    var_dump($matchs);
    }
    反向预查:
    $regex = '/(?<!c)d(?!e)/';
    $str = 'asdwerfcde';
    if (preg_match($regex,$str,$matchs)) {
    var_dump($matchs);
    }
    字符宽度0
    验证零字符代码
    $regex = '/^H(?<=E)L(?=L)O$/';
    $str = 'hello';
    if (preg_match($regex,$str,$matchs)) {
    var_dump($matchs);
    } // 打印不出结果!

    $regex = '/HE(?=L)LLO/i';
    $str = 'HELLO';
    if (preg_match($regex,$str,$matchs)) {
    var_dump($matchs);
    }
    说明(?=L)意思是HE后面紧跟一个L字符。但(?L)本身不占字符 要与(L)区分

    6.捕获数据

    没有指明类型而进行的分祖,将会被获取,供以后使用
    (指明类型的分组是指通配符号,只有起始位置只有圆括号没有?的才能被捕捉)
    调用格式 :编号 如1
    $regex = '/^(abc)[s]1$/i'; //注:在abc前加?:(如(?:abc)) 则 /1不能捕捉到数据 即数据1已经被避免捕捉
    $str = 'abc abc';
    if (preg_match($regex,$str,$matchs)) {
    var_dump($$matchs);
    }
    括号里的数据(abc)会被存进数据(内存)
    然后以 /编号 的形式被捕捉

    7.命名捕捉组
    如果组太多可以采用已命名的方式捕捉数据哦
    格式:(?P<组名>)
    调用方式:(?P=组名)
    $regex = '/^(?P<name>abc)[s](?P=name)$/i';
    $str = 'abc abc';
    if (preg_match($regex,$str,$matchs)) {
    var_dump($matchs);
    }
    E:wamp64wwwfirst day preg_matchprege_match.php:49:
    array (size=3)
    0 => string 'abc abc' (length=7)
    'name' => string 'abc' (length=3)
    1 => string 'abc' (length=3)

    8.惰性匹配
    原理:如果'?'前面有限定符号则使用最小的数据 如*会取0个 +取一个 {1,2}取一个1个
    $regex = '/^abc*?$/i';
    $str = 'abcccccccc';
    if (preg_match($regex,$str,$matchs)) {
    var_dump($matchs);
    }

    9.正则表达式的注释
    格式:(?#注释内容)
    用途:主要用于复杂的注释
    举个例子
    如MYSQL连接数据库时
    $regex = '/^host=(?<!.)([d.])+(?!.)(?#主机地址)|([w@#$%*()_+-]+)(?#用户名)|([w@#$%*()_+-]+)(?#密码)(?!|)$/ix';
    $str = 'host=192.168.10.221|root|123456';
    if (preg_match($regex,$str,$matchs)) {
    var_dump($matchs);
    }
    0 => string 'host=192.168.10.221|root|123456' (length=31)
    1 => string '192.168.10.221' (length=14)
    2 => string 'root' (length=4)
    3 => string '123456' (length=6)
    键位0代表匹配最长的值
    其余键位的值代表每个数据组里面匹配到的值 如([d.])+(?!.)匹配存储的值是$str里面的'192.168.10.221'

    10.特殊字符
    * 0次到多次
    + 1次到多次
    ? 0次到一次
    . 匹配换行符号以外的当个字符
    *. 匹配换行符号以外的所有字符
    w 字母数字 [a-zA-Z0-9]
    s 匹配空白字符 空格 换行 回车
    d 数字 [0-9]

  • 相关阅读:
    工作流flowable官方文档阅读笔记2
    bladex代码生成表单字典(非普通字典)改造
    bladex代码生成改造字典(表管理字段带入)
    bladex前端页面设置
    重链剖分
    CodeForces 311B
    洛谷 P6302
    AtCoder abc164_f
    ISIJ2020 不知道算不算游记
    AtCoder abc165
  • 原文地址:https://www.cnblogs.com/jasonxiaoqinde/p/6567310.html
Copyright © 2011-2022 走看看