javaRegex中的數量詞

來源:互聯網
上載者:User

    java中的正則位於java.util.regex包中,這個包中只有一個MatchResult介面和Matcher、Pattern兩個類。 

   正則中的數量詞有Greedy (貪婪)、Reluctant(懶惰)和Possessive(強佔)三種 

  

Greedy 數量詞 
X? X,一次或一次也沒有 
X* X,零次或多次 
X+ X,一次或多次 
X{n} X,恰好 n 次 
X{n,} X,至少 n 次 
X{n,m} X,至少 n 次,但是不超過 m 次 
Greedy是最常用的,它的匹配方式是先把整個字串吞下,然後匹配整個字串,如果不匹配,就從右端吐出一個字元,再進行匹配,直到找到匹配或把整個字串吐完為止。 

[java] view plaincopy 
Matcher m=Pattern.compile("a.*b")  
              .matcher("a====b=========b=====");  
while(m.find()){  
      System.out.println(m.group());  
        }  
  
  
輸出:  
a====b=========b  

因為總是從最大 匹配開始匹配,故稱貪婪。 

Reluctant 數量詞 
X?? X,一次或一次也沒有 
X*? X,零次或多次 
X+? X,一次或多次 
X{n}? X,恰好 n 次 
X{n,}? X,至少 n 次 
X{n,m}? X,至少 n 次,但是不超過 m 次 
Reluctant正好和Greedy相反,它先從最小匹配開始,先從左端吞入一個字元,然後進行匹配,若不匹配就再吞入一個字元,直到找到匹配或將整個字串吞入為止。 

[java] view plaincopy 
Matcher m=Pattern.compile("a.*?b")  
                  .matcher("a====b=========b=====");  
while(m.find()){  
        System.out.println(m.group());  
        }  
  
輸出:  
a====b  

因為總是從最小匹配開始,故稱懶惰。 

Possessive 數量詞 
X?+ X,一次或一次也沒有 
X*+ X,零次或多次 
X++ X,一次或多次 
X{n}+ X,恰好 n 次 
X{n,}+ X,至少 n 次 
X{n,m}+ X,至少 n 次,但是不超過 m 次 
Possessive和Greedy的匹配方式一樣,先把整個字串吞下,然後匹配整個字串,如果匹配,就認為匹配,如果不匹配,就認為整個字串不匹配,它不會從右端吐出一個字串再進行匹配,只進行一次 

[java] view plaincopy 
Matcher m=Pattern.compile("a.*+b")  
                   .matcher("a====b=========b=====");  
while(m.find()){  
    System.out.println(m.group());  
        }  
  
輸出:  

因為貪婪但並不聰明,故稱強佔。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.