正則表示式的貪婪匹配與懶惰匹配
阿新 • • 發佈:2019-02-04
今天用到正則表示式的懶惰匹配,由於開始不是很瞭解,所以一個問題糾結了一天,真正瞭解了就不難了。
例:一個字串“abcdakdjd”
regex="a.*?d"; 懶惰匹配
regex2="a.*d"; 貪婪匹配
public static void main(String[] args) { int count = 0; //Scanner sc = new Scanner(System.in); //String str = sc.next(); String str = "abcdakdjd"; String regex="a.*?d"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(str); while (m.find()) { count++; System.out.println(m.group()); } System.out.println("abcde在字串"+str+"中出現的次數為"+count+"次"); }
結果:
abcd
akd
abcde在字串abcdakdjd中出現的次數為2次
這裡是懶惰匹配,匹配到滿足條件的abcd就停止了此次匹配,不會干擾後面的繼續匹配。
當把regex="a.*?d" 換成regex="a.*d"
結果:
abcdakdjd
abcde在字串abcdakdjd中出現的次數為1次
這裡是貪婪匹配,顧名思義,很貪婪,要最大限度的佔用字串。
以上兩種,一個是儘量匹配最短串,一個是要匹配最長串。