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


          貪婪量詞:

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

           惰性量詞:

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

          支配量詞:
          只嘗試匹配整個(gè)字符串。如果整個(gè)字符串不能產(chǎn)生匹配,不做進(jìn)一步嘗試。

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

          例如:我們要從字符串a(chǎn)bbbaabbbaaabbb1234中獲得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
            可以看到,貪婪量詞在取得一次匹配后就會(huì)停止工作,雖然我們加了'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 //保存結(jié)果,并從下一個(gè)位置重新開始
            
            e)a
            f)aa
            g)aab
            h)aabb
            j)aabbb //保存結(jié)果,并從下一個(gè)位置重新開始
            
            e)a
            e)aa
            e)aaa
            e)aaab
            e)aaabb
            e)aaabbb  //保存結(jié)果,并從下一個(gè)位置重新開始

          由于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

          因?yàn)橹淞吭~采用一刀切的匹配方式,如:
            a)abbbaabbbaaabbb1234 //false
          posted on 2009-01-07 14:54 零全零美 閱讀(3500) 評(píng)論(3)  編輯  收藏 所屬分類: 正則表達(dá)式

          FeedBack:
          # re: 正則表達(dá)式學(xué)習(xí)筆記(4) 貪婪、惰性和支配量詞
          2009-01-08 09:25 | 于翔
          好強(qiáng)啊  回復(fù)  更多評(píng)論
            
          # re: 正則表達(dá)式學(xué)習(xí)筆記(4) 貪婪、惰性和支配量詞
          2009-01-09 13:53 | 劉凱毅
          上次提了下懶散匹配。沒想到 blog主 這寫的這麼詳細(xì),學(xué)習(xí)了。
          貪婪、惰性和支配量詞 說的這麼清楚真太清楚了。
          為了表示與blog共同學(xué)習(xí) 正則,我就寫點(diǎn)和本文擦邊的,拋磚引玉把:
          目的:
            使用 javascript a[0];
                 java ma.group(0); 來取得你想要的值
            一正則一匹配,后面不需要多余動(dòng)作。
          內(nèi)容》abbbaabbbaaabbb1234
          $1預(yù)查 或 非消費(fèi)-匹配
          比如上面適用 .*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
          結(jié)果》 a[0] //output:aabbb

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


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







            回復(fù)  更多評(píng)論
            
          # re: 正則表達(dá)式學(xué)習(xí)筆記(4) 貪婪、惰性和支配量詞[未登錄]
          2010-08-08 15:46 | ty
          搜來搜去都是這篇文章,抄襲成風(fēng)啊。  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 临桂县| 平湖市| 安陆市| 宁化县| 罗山县| 安康市| 农安县| 昆山市| 连云港市| 江门市| 灵石县| 民和| 大姚县| 平舆县| 扬中市| 六盘水市| 阳江市| 黄骅市| 庆城县| 灵璧县| 阿克陶县| 陆川县| 溧水县| 铅山县| 榆中县| 页游| 抚州市| 大田县| 湖州市| 渑池县| 仙游县| 宁海县| 浦江县| 灯塔市| 潞城市| 手机| 县级市| 荔浦县| 慈溪市| 焉耆| 遵义市|