正则表达式分组捕获,贪婪匹配,反向引用,非捕获组,零宽度断言

/** 分组 */
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
true
true
 /** 反向引用替换 */
System.out.println("updateUser".replaceAll("([a-z])([A-Z])","$1_$2").toLowerCase());
System.out.println("update_user".replaceAll("_(\\D)","$1"));
#结果#:
update_user
updateuser
/** 非捕获组 只匹配 不捕获分组 */
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

猜你喜欢

转载自blog.csdn.net/weixin_43275277/article/details/107118898
今日推荐