• 学好正则表达式需要注意的几点


    关于preg_match 和preg_match_all 函数结果的说明

    php代码为:

    <?php
    $str = "sdh111-757-111fkjhgjkiu888-060-888ygndfhdsuifyiud";
    $reg = '/(d)1{2}-(d)d2-1{3}/i';

    //preg_match($reg,$str,$res);
    preg_match_all($reg,$str,$res);
    var_dump($res);
    ?>

    preg_match结果为:

    Array

    (

        [0] => 111-575-111

        [1] => 1

        [2] => 5

    )

    如果使用的是preg_match函数,匹配的结果是,只匹配一个结果

    $res[0] 就是匹配到的内容

    $reg[1] 就是第一个子表达式的内容

    $reg[n] 就是第n个子表达式的内容

    preg_match_all结果为

    1:子表达式

    就是在正则表达式中()里面的表达式,这些括号中的表达式匹配到的元素,会被捕获到内存中,就是上面preg_match和preg_match匹配的数组中除第一个以外的数组部分。

    2:捕获 (请注意,如果你的正则表达式中有子表达式,则,正则表达式使用单引号括起来)

    3:反向引用

    上面的例子中的这个正则表达式:

    $reg = '/(d)1{2}-(d)d2-1{3}/i';

    这个正则表达式中就用到了反向引用,其中  1   2   都是反向引用,代表的是第一个、第二个子表达式匹配到的内容。

     

    特殊的说明:

    在正则规范中,我们可能会 看到 (?: pattern) (?! patter) (?<!pattern) (?=pattern) (?<=pattern)

    (?: pattern) 非捕获匹配

    这些特殊的表达式是正则中的  环视 有兴趣可以网上搜索学习。

    表达式           说明

    (?<=pattern) 逆序肯定环视,表示所在位置左侧能够匹配Expression

    (?<!pattern)  逆序否定环视,表示所在位置左侧不能匹配Expression

    (?=pattern)   顺序肯定环视,表示所在位置右侧能够匹配Expression

    (?!pattern)    顺序否定环视,表示所在位置右侧不能匹配Expression

    参考说明文档:

    (?:pattern)      匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。

    (?!pattern)      负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始

  • 相关阅读:
    OO开发
    重构:Extract Method (提炼函数)
    Vue 一个组件引用另一个组件
    闭包
    视差滚动原理与实现
    JS中的constructor 和 prototype
    jQuery 为动态添加的元素绑定事件
    setTimeout 的理解
    关于Vertical Align的理解
    网页特效:滚动视差设计指南
  • 原文地址:https://www.cnblogs.com/573734817pc/p/10105146.html
Copyright © 2020-2023  润新知