1. 程式人生 > >正則表示式的貪婪匹配與懶惰匹配

正則表示式的貪婪匹配與懶惰匹配

今天用到正則表示式的懶惰匹配,由於開始不是很瞭解,所以一個問題糾結了一天,真正瞭解了就不難了。

例:一個字串“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次

這裡是貪婪匹配,顧名思義,很貪婪,要最大限度的佔用字串。

以上兩種,一個是儘量匹配最短串,一個是要匹配最長串。