/** 分组 */
String email ="[email protected]";
Pattern p =compile("(\\w+)[@]{1}(\\w+[.]\\w+)");
Matcher m = p.matcher(email);if(m.find()){for(int i =0; i <= m.groupCount(); i++){
System.out.println(String.format("分组:%d,捕获:%s",i,m.group(i)));}}
#结果#:
分组:0,捕获:star@163.com
分组:1,捕获:star
分组:2,捕获:163.com
/** 贪婪匹配 */
p =compile("(\\d+)(0*)");
m = p.matcher("500");if(m.find()){for(int i =1; i <= m.groupCount(); i++){
System.out.println(String.format("分组:%d,捕获:%s",i,m.group(i)));}}
#结果#:
分组:1,捕获:500
分组:2,捕获:
/** 非贪婪匹配 */
p =compile("(\\d+?)(0*)");
m = p.matcher("1000");if(m.find()){for(int i =1; i <= m.groupCount(); i++){
System.out.println(String.format("分组:%d,捕获:%s",i,m.group(i)));}}
#结果#:
分组:1,捕获:1
分组:2,捕获:000
/** 反向引用 */
p =compile("([a-z])([A-Z])(\\1)(\\2)");
m = p.matcher("sAsA");if(m.find()){for(int i =1; i <= m.groupCount(); i++){
System.out.println(String.format("分组:%d,捕获:%s",i,m.group(i)));}}
System.out.println("aa".matches("([aB])\\1"));
System.out.println("BB".matches("([aB])\\1"));
#结果#:
分组:1,捕获:s
分组:2,捕获:A
分组:3,捕获:s
分组:4,捕获:A
truetrue
/** 非捕获组 只匹配 不捕获分组 */
p =compile("([¥$])(\\d+)(?:[.])(?:\\d+)");
m = p.matcher("¥128.85");if(m.find()){for(int i =1; i <= m.groupCount(); i++){
System.out.println(String.format("分组:%d,捕获:%s",i,m.group(i)));}}
#结果#:
分组:1,捕获:¥
分组:2,捕获:128
/** 零宽度 肯定 向前断言 */
p =compile("([a-z]{4})(?=520)");
m = p.matcher("Gstar520-moon520");while(m.find()){for(int i =1; i <= m.groupCount(); i++){
System.out.println(String.format("分组:%d,捕获:%s",i,m.group(i)));}}
#结果#:
分组:1,捕获:star
分组:1,捕获:moon
/** 零宽度 否定 向前断言 */
p =compile("([a-z]{4})(?!520)");
m = p.matcher("Gstar520-moon520-love1989");while(m.find()){for(int i =1; i <= m.groupCount(); i++){
System.out.println(String.format("分组:%d,捕获:%s",i,m.group(i)));}}
#结果#:
分组:1,捕获:love
/** 零宽度 肯定 向后断言 */
p =compile("(?<=520)([a-z]{4})");
m = p.matcher("Gstar520moon520love1989");while(m.find()){for(int i =1; i <= m.groupCount(); i++){
System.out.println(String.format("分组:%d,捕获:%s",i,m.group(i)));}}
#结果#:
分组:1,捕获:moon
分组:1,捕获:love
/** 零宽度 否定 向后断言 */
p =compile("(?<!520)([a-z]{4})");
m = p.matcher("gstar520moon520love1989");while(m.find()){for(int i =1; i <= m.groupCount(); i++){
System.out.println(String.format("分组:%d,捕获:%s",i,m.group(i)));}}
#结果#:
分组:1,捕获:gsta