Ordinary hut

          人間一福地,勝似天仙宮
          posts - 61, comments - 50, trackbacks - 0, articles - 1

          正則表達式中的貪婪、惰性和支配量詞

          Posted on 2009-10-30 16:13 landor 閱讀(509) 評論(0)  編輯  收藏 所屬分類: 正則
          正則表達式中有三個量詞:貪婪、惰性、支配,記錄一下我對貪婪和惰性的理解
          1 貪婪:一下子打算匹配整個字符串,如果發現不匹配,就去掉最后一個字符,進行匹配,以此類推。一旦匹配成功之后,并不是馬上返回,而是跳躍到下一個字符的起點,再次開始貪婪的匹配,舉個例子:
              public static void main(String []args) {
                  String str
          ="1abbbaabbbaaabbb1234abbbc"
                  Pattern p2 
          = Pattern.compile("[^1]*bbb");
                  Matcher m2 
          =p2.matcher(str);
                  
          while(m2.find()){
                      System.out.println(m2.group());
                  }
              }
          他的執行過程應該是這樣:
            先找到滿足條件的第一個字符,所以1會被過濾掉,然后進行全局匹配
            abbbaabbbaaabbb1234abbbc  不匹配
            abbbaabbbaaabbb1234abbb   不匹配
            abbbaabbbaaabbb1234abb    不匹配
            

            abbbaabbbaaabbb          匹配
            之后表達式會繼續尋找這個字符串后面的匹配的第一個字符,所以后面的1會被過濾掉,然后再進行全局匹配,即:
            234abbbc   不匹配
            234abbb    匹配
          所以會得到兩個匹配結果  abbbaabbbaaabbb和234abbb

          2 惰性
          從第一個字符開始進行匹配,如果不匹配,那么就在讀入一個字符,進行整體匹配,以此類推

          還是看上面的例子,如果是貪婪的,那么正則是這樣
          [^1]*?bbb,執行過程如下:
            先找到滿足條件的第一個字符,所以1還是被過濾,從a開始,匹配過程如下
            a    不匹配
            ab   不匹配
            abb  不匹配
            abbb 匹配

            繼續從下一個位置開始讀入第一個匹配字符
            a    不匹配
            aa   不匹配
            
          不匹配
            aabbb匹配

           一直進行到最后,所以得到的結果為abbb,aabbb,aaabbb,234abbb

          3 支配
            支配就是對整個字符串進行一次匹配,匹配之后返回
            舉個例子,字符串為bbb,正則表達式為[b]*+,這是一個貪婪的匹配,直接返回bbb
            但是這里有個要注意的地方:如果正則為
          [b]*+b,返回結果是false,是空

          所以雖然
          [b]*+匹配了,但是當再多了一個b的時候,有不滿足要求了,因為他們是全局匹配的

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 禄劝| 汕头市| 龙岩市| 璧山县| 招远市| 新平| 喀喇沁旗| 嘉定区| 玉林市| 丰顺县| 巴楚县| 灵寿县| 宜兰市| 罗城| 泽州县| 青冈县| 五常市| 博客| 精河县| 塔城市| 色达县| 桑植县| 雷州市| 泰州市| 千阳县| 会东县| 突泉县| 叶城县| 福安市| 清镇市| 富裕县| 诸城市| 文安县| 康乐县| 关岭| 南靖县| 衡山县| 乌鲁木齐市| 望谟县| 莎车县| 察雅县|