zoukankan      html  css  js  c++  java
  • 正则表达式(.+?)与(.+)区别

    (.+) 代表的是贪婪,匹配从右到左。

    (.+?)代表的是非贪婪,匹配从左到右。

    昨天碰到的问题,在BBs问了得出的答应如下./(.+?)b/is  是非贪婪模式 匹配ab /(.*)b/is 是贪婪模式 匹配abb,

    那么我们来看看基本的符号说明:

    *                                0次、1次或多次匹配其前的原子
    +                                1次或多次匹配其前的原子
    ?                                0次或1次匹配其前的原子
    .                                匹配除换行之外的任何一个字符

    再看看简单的例子:

    你测试.+?和.*当然看不出区别了
    测试这个字符串看看
    'aaa<div style="font-color:red;">123456</div>bbb'
    <.+?>会匹配<div style="font-color:red;">和</div>
    <.*>会匹配<div style="font-color:red;">123456</div>

    最后看看高手怎么说的.

    (.+)默认这是贪婪匹配
    贪婪是先看整个字符串是否匹配, 如果不匹配,它会去掉字符串的最后一个字符, 并再次尝式, 如果还不匹配, 那么再去掉当前最后一个, 直到发现匹配或不剩任何字符.
    过程大概这样:
    $str='abcdabceba'
    /.+b/  // 匹配一个或多个任意字符后面跟一个字母 b

    第一次(先看整个字符串是否是一个匹配) abcdabceba 不匹配,然后去掉最后一个字符 a
    第二次(去掉最后一个字符后再匹配) abcdabceb  正确退出

    惰性是从左侧第一个字符开始向右匹配, 先看第一个字符是不是一个匹配, 如果不匹配就加入下一个字符再尝式匹配, 直到发现匹配...
    过程大概这样
    $str='abcdabceba'
    /.+?b/ // 同样匹配一个或多个任意字符后面跟一个字母 b

    第一次(读入左侧第一个字符) a 不匹配加一个再式
    第二次 ab  匹配记录下来,继续(如果匹配所有的话,比如 preg_match_all, 或preg_replace, 不是所有到这儿就停了
    第三次 c
    ...
    cdab  匹配记录下来,继续
    ...
    ceb  匹配记录下来,继续

    a 到最后了没有了退出


    简单例子:
    <?php
    //这里因为没有用all, .+?只匹配一次

            
    $str='abcdabceba';
            
    preg_match('/.+b/', $str, $s);
            echo
    $s[0]; // abcdabceb
            
            
    echo"   ";
            
    preg_Match('/.+?b/', $str, $s);
            echo
    $s[0]; // ab
            
            
    echo"   ";
            
    preg_Match('/.+b/U', $str, $s); //等同于 /.+?b/
            
    echo $s[0]; //ab
    ?>

    refer to: http://syeca.imgxm.com/web/index.php?m=content&c=index&a=show&catid=16&id=956

  • 相关阅读:
    利用css实现鼠标经过元素,下划线由中间向两边展开
    盒模型的auto值
    CSS选择器
    CSS类名命名规则
    leetcode 移除元素
    leetcode 有效的括号
    leetcode 罗马数字转整数
    leetcode 回文数
    leetcode 合并两个有序数组
    leetcode 最长公共前缀
  • 原文地址:https://www.cnblogs.com/Spider-spiders/p/7403268.html
Copyright © 2011-2022 走看看