Java基础教程(118)正则表达式之复杂匹配规则:解锁Java正则表达式高阶技巧,复杂匹配规则全解析

1.复杂匹配规则解析

贪婪vs懒惰匹配

默认贪婪模式会匹配尽可能长的字符串:

String text = "abcxxxabc";
Pattern.compile("a.*c").matcher(text).find(); // 匹配整个字符串

使用问号启用懒惰模式:

Pattern.compile("a.*?c").matcher(text).find(); // 匹配"abc"

分组与反向引用

圆括号创建捕获组,\n引用前面分组:

String date = "2023-08-20";
Pattern pattern = Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2})");
Matcher matcher = pattern.matcher(date);
if (matcher.find()) {
    System.out.println(matcher.group(1)); // 2023
}

前瞻后顾断言

(?=)正向肯定前瞻匹配后面跟着特定模式的位置:

// 匹配后面跟着"元"的数字
Pattern.compile("\\d+(?=元)").matcher("价格100元").find(); // 匹配100

(?!)正向否定前瞻排除特定模式:

// 匹配不是"元"结尾的数字
Pattern.compile("\\d+(?!元)").matcher("100美元").find(); // 匹配100

2. 实用示例合集

HTML内容提取

String html = "<div><p>Hello</p></div>";
Pattern tagPattern = Pattern.compile("<([a-z][a-z0-9]*)[^>]*>.*?</\\1>");
Matcher tagMatcher = tagPattern.matcher(html);
while (tagMatcher.find()) {
    System.out.println(tagMatcher.group()); // 完整标签
}

密码强度验证

String password = "StrongPwd123";
// 要求:大小写字母、数字、特殊字符,8-20位
String regex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,20}$";
boolean isValid = password.matches(regex);

掌握这些复杂匹配规则后,您将能应对各种文本处理场景,大幅提升开发效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

值引力

持续创作,多谢支持!

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

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

打赏作者

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

抵扣说明:

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

余额充值