<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    零全零美(www.zzgwt.com)
    生活中的很多事情,并不像If...Else那么簡單!
    posts - 96,comments - 52,trackbacks - 0


    貪婪量詞:

    先看整個字符串是不是一個匹配。如果沒有發現匹配,它去掉最后字符串中的最后一個字符,并再次嘗試。如果還是沒有發現匹配,那么    再次去掉最后一個字符串,這個過程會一直重復直到發現一個匹配或者字符串不剩任何字符。簡單量詞都是貪婪量詞。

     惰性量詞:

    先看字符串中的第一個字母是不是一個匹配,如果單獨著一個字符還不夠,就讀入下一個字符,組成兩個字符的字符串。如果還沒有發現匹配,惰性量詞繼續從字符串中添加字符直到發現一個匹配或者整個字符串都檢查過也沒有匹配。惰性量詞和貪婪量詞的工作方式恰好相反。

    支配量詞:
    只嘗試匹配整個字符串。如果整個字符串不能產生匹配,不做進一步嘗試。

    貪婪量詞   惰性量詞    支配量詞                      描述
    -------------------------------------------------------------------------------------
      ?             ??             ?+                      可以出現0次或1次,但至多出現1次
      *             *?            *+                      可以出現任意次,也可以不出現
      +             +?            ++                      出現1次或多次,但至少出現1次
      {n}        {n}?           {n}+                   一定出現n次
      {n,m}    {n,m}?       {n,m}+               至少出現n次,但至多不能超過m次
      {n,}       {n,}?          {n,}+                 可以出現任意次,但至少出現n次

    例如:我們要從字符串abbbaabbbaaabbb1234中獲得abbb,aabbb,aaabbb的匹配
    1、貪婪量詞
    1        var regexp = /.*bbb/g;
    2        var a = str.match(regexp);
    3        alert(a.length);   //output:1
    4        alert(a[0]);       //output:abbbaabbbaaabbb

    貪婪量詞的工作過程可以這樣表示:
      a)abbbaabbbaaabbb1234
      b)abbbaabbbaaabbb123
      c)abbbaabbbaaabbb12
      d)abbbaabbbaaabbb1
      e)abbbaabbbaaabbb //true
      可以看到,貪婪量詞在取得一次匹配后就會停止工作,雖然我們加了'g'(全局匹配)
    2、惰性量詞

    1        var regexp = /.*?bbb/g;
    2        var a = str.match(regexp);
    3        alert(a.length);   //output:3
    4        alert(a[0]);       //output:abbb
    5        alert(a[1]);       //output:aabbb
    6        alert(a[2]);       //output:aaabbb

    惰性量詞的工作過程可以這樣表示:
      a)a
      b)ab
      c)abb
      d)abbb //保存結果,并從下一個位置重新開始
      
      e)a
      f)aa
      g)aab
      h)aabb
      j)aabbb //保存結果,并從下一個位置重新開始
      
      e)a
      e)aa
      e)aaa
      e)aaab
      e)aaabb
      e)aaabbb  //保存結果,并從下一個位置重新開始

    由于JS是不支持支配量詞的,所以支配量詞我們只能用JAVA來演示:

    1        String string = "abbbaabbbaaabbb1234";
    2        Pattern p = Pattern.compile(".*+bbb");
    3        Matcher m = p.matcher(string);
    4        System.out.println(m.find());   //output:false
    5

    因為支配量詞采用一刀切的匹配方式,如:
      a)abbbaabbbaaabbb1234 //false
    posted on 2009-01-07 14:54 零全零美 閱讀(3498) 評論(3)  編輯  收藏 所屬分類: 正則表達式

    FeedBack:
    # re: 正則表達式學習筆記(4) 貪婪、惰性和支配量詞
    2009-01-08 09:25 | 于翔
    好強啊  回復  更多評論
      
    # re: 正則表達式學習筆記(4) 貪婪、惰性和支配量詞
    2009-01-09 13:53 | 劉凱毅
    上次提了下懶散匹配。沒想到 blog主 這寫的這麼詳細,學習了。
    貪婪、惰性和支配量詞 說的這麼清楚真太清楚了。
    為了表示與blog共同學習 正則,我就寫點和本文擦邊的,拋磚引玉把:
    目的:
      使用 javascript a[0];
           java ma.group(0); 來取得你想要的值
      一正則一匹配,后面不需要多余動作。
    內容》abbbaabbbaaabbb1234
    $1預查 或 非消費-匹配
    比如上面適用 .*bbb 》a[1]
       alert(a.length); //output:3
       alert(a[0]); //output:abbb
       alert(a[1]); //output:aabbb
       alert(a[2]); //output:aaabbb
    正則》 aa.*?(?=aaa)
    原則上》 必須要知道要匹配后文字
    適用》 javascript/java
    結果》 a[0] //output:aabbb

    $2 非消費-匹配
      正則》(?<=b{3}).*(?=a{3})
      適用》java
      結果》ma.group(0) = aabbb
      原則》只要知道需要匹配的前后文字,不需要知道自己怎么樣。


    不太爽的地方:非消費-后匹配,javascript 沒有
      就是 (?<=b{3}).*(?=a{3}) 的這個。







      回復  更多評論
      
    # re: 正則表達式學習筆記(4) 貪婪、惰性和支配量詞[未登錄]
    2010-08-08 15:46 | ty
    搜來搜去都是這篇文章,抄襲成風啊。  回復  更多評論
      
    主站蜘蛛池模板: 亚洲一区二区三区免费观看| 91视频精品全国免费观看| 四虎成年永久免费网站| 亚洲国产一区二区a毛片| 波多野结衣免费一区视频| 国产亚洲婷婷香蕉久久精品| 中文字幕在线免费看线人| 精品国产_亚洲人成在线高清| 成人免费无码H在线观看不卡| 国产亚洲精品自在线观看| 全免费a级毛片免费看| 久久亚洲国产视频| 1000部羞羞禁止免费观看视频| 亚洲精品视频观看| 美女视频黄a视频全免费| 亚洲一卡2卡3卡4卡5卡6卡 | 日韩在线观看免费完整版视频| 又粗又硬又大又爽免费视频播放| 免费无码专区毛片高潮喷水| 中文字幕专区在线亚洲| 成人片黄网站色大片免费观看APP| 亚洲an天堂an在线观看| 青草草色A免费观看在线| 国产精品亚洲专区无码唯爱网| 亚洲&#228;v永久无码精品天堂久久| 四虎国产精品成人免费久久| 亚洲av无码av制服另类专区| 国产h视频在线观看免费| 看全免费的一级毛片| 亚洲国产综合无码一区 | av永久免费网站在线观看| 亚洲综合久久成人69| 午夜私人影院免费体验区| 国产伦精品一区二区免费| 亚洲另类春色国产精品| 全亚洲最新黄色特级网站 | 精品一卡2卡三卡4卡免费视频| 亚洲最大成人网色| 免费一级大黄特色大片| 小日子的在线观看免费| 国产成人高清亚洲一区91|