Greedy翻译为:贪婪,贪心,侧面描述了正则表达式的特点;
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
例如:X+ X,一次或多次
Demo1:
String str1 = “兄.弟弟…们们们们们…Just….do…it..”;
String regex1 = “兄+”;
System.out.println(str1.replaceAll(regex1, “1”));
regex1 = “弟+”;
System.out.println(str1.replaceAll(regex1, “1”));
输出:
1.弟弟…们们们们们…Just….do…it..
兄.1…们们们们们…Just….do…it..
说明,“X+”代表X出现1次或1次以上;
Demo2:
regex1 = “(兄)\\1+”;
System.out.println(str1.replaceAll(regex1, “1”));
regex1 = “(弟)\\1+”;
System.out.println(str1.replaceAll(regex1, “1”));
输出:
兄.弟弟…们们们们们…Just….do…it..
兄.1…们们们们们…Just….do…it..
说明,在组的概念中,”(X)\\1+”代表X出现两次或两次以上
Demo3:
regex1 = “(.)\\1+(\\.)\\2+”;
System.out.println(str1.replaceAll(regex1, “1”));
输出:
兄.11Just1do…it..
说明,在组的概念中,出现的第一个括号所包括的内容,编号为1,第二个为2,类推。弟弟…–>1;们们们们们…—>1;….—>1;即替换后有三处符合正则,被替换。