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

/** 分组 */
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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农小麦

一起学习共同进步

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值