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

    技术2024-12-23  16

    /** 分组 */ String email = "star@163.com"; 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
    Processed: 0.010, SQL: 9