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());
}
輸出:
因為貪婪但並不聰明,故稱強佔。