• 闲来总结一下正则



    自我总结的正则难点

    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]

  • 相关阅读:
    Spring Data JPA简介 Spring Data JPA特点
    JavaScript的事件循环机制总结 eventLoop
    什么是 MyBatis?
    如果你也用过 struts2.简单介绍下 springMVC 和 struts2 的区别有哪些?
    SpringMvc 框架
    线程、并发、并行、进程是什么,以及如何开启新的线程?
    面试:你最大的长处和弱点分别是什么?这些长处和弱点对你在企业的业绩会有什么样的影响?
    面向对象三大特性
    一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?
    面向对象三大特性
  • 原文地址:https://www.cnblogs.com/jasonxiaoqinde/p/6567310.html
Copyright © 2020-2023  润新知