java正則表達式——Greedy、Reluctant和Possessive。本站提示廣大學習愛好者:(java正則表達式——Greedy、Reluctant和Possessive)文章只能為提供參考,不一定能成為您想要的結果。以下是java正則表達式——Greedy、Reluctant和Possessive正文
Greedy:貪心的;Reluctant:勉強的;Possessive :獨占的。
測試1:
package jichu;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MainClass {
public static void main(String[] args) {
Matcher m1 = Pattern.compile("\\w+").matcher("ababa");// 貪心的
Matcher m2 = Pattern.compile("\\w+?").matcher("ababa");// 勉強的
Matcher m3 = Pattern.compile("\\w++").matcher("ababa");// 獨占的
System.out.println(piPei(m1));
System.out.println(piPei(m2));
System.out.println(piPei(m3));
}
public static String piPei(Matcher m) {
StringBuffer s = new StringBuffer();
int i = 0;
while (m.find()) {
s.append("{婚配子串" + ++i + ":" + m.group() + ";");
s.append("開端地位:" + m.start() + ";");
s.append("完畢地位:" + m.end() + ";}");
}
if (s.length() == 0) {
s.append("沒有婚配到!");
}
s.insert(0, "(形式" + m.pattern().pattern() + "):");
return s.toString();
}
}
打印:
(形式\w+):{婚配子串1:ababa;開端地位:0;完畢地位:5;}
(形式\w+?):{婚配子串1:a;開端地位:0;完畢地位:1;}{婚配子串2:b;開端地位:1;完畢地位:2;}{婚配子串3:a;開端地位:2;完畢地位:3;}{婚配子串4:b;開端地位:3;完畢地位:4;}{婚配子串5:a;開端地位:4;完畢地位:5;}
(形式\w++):{婚配子串1:ababa;開端地位:0;完畢地位:5;}
從測試1中可知:
1、關於貪心的,會一次性婚配一切的字符;
2、關於勉強的,會從左到右一個一個的婚配;
3、關於獨占的,與貪心的一樣也是一次性婚配一切的字符;
測試2:(在測試1的根底上修正main辦法)
public static void main(String[] args) {
Matcher m1 = Pattern.compile("\\w+b").matcher("ababa");// 貪心的
Matcher m2 = Pattern.compile("\\w+?b").matcher("ababa");// 勉強的
Matcher m3 = Pattern.compile("\\w++b").matcher("ababa");// 獨占的
System.out.println(piPei(m1));
System.out.println(piPei(m2));
System.out.println(piPei(m3));
}
打印:
(形式\w+b):{婚配子串1:abab;開端地位:0;完畢地位:4;}
(形式\w+?b):{婚配子串1:ab;開端地位:0;完畢地位:2;}{婚配子串2:ab;開端地位:2;完畢地位:4;}
(形式\w++b):沒有婚配到!
從測試1、2中可知:
1、關於貪心的,'\w+'曾經一次性婚配了一切的字符;當形式後加'b'後,此時不婚配,然後回溯1個字符,婚配成功。
2、關於勉強的,從左到右婚配,婚配出兩個子串。
3、關於獨占的,'\w++'曾經一次性婚配了一切的字符;當形式後加'b'後,此時不婚配,與貪心的不一樣的是它不會回溯,所以婚配失敗。
總結
1、Greedy數量詞為“貪心的”,如名字一樣,多吃多占,它會盡能夠多的婚配字符,會回溯。
2、Reluctant數量詞為“勉強的”,奉行夠用主義,它會盡能夠少的婚配字符。
3、Possessive數量詞為“獨占的”,它會如Greedy一樣盡能夠多的婚配字符,但是它不會回溯。
更多與正則表達式相關內容:
java正則規則表
java之Pattern類詳解
java之Matcher類詳解