今天由于一个正则的关系,涉及到了贪婪匹配和懒惰匹配,因为对正则表达不是很懂,所以做个笔记
以下是获取验证码的方法
/**
* 从短信内容中获取验证码
* @param src
* @param startMatch
* @param endMatch
* @return
*/
public static String getRandomCode(String startMatch, String src, String endMatch) {
String randomCode = null;
String pattern = null;
if (EmptyUtils.isNotBlank(endMatch)) { // 1.如果结束标识不为空
// pattern = String.format("%s(.*)%s", startMatch, endMatch);// 正则-贪婪匹配
pattern = String.format("%s(.*?)%s", startMatch, endMatch);// 正则-懒惰婪匹配
} else {
pattern = String.format("%s([0-9|a-z|A-Z]+)", startMatch);
}
Pattern pn = Pattern.compile(pattern);
Matcher matcher = pn.matcher(src);
if (matcher.find()) {
randomCode = matcher.group(1);
}
System.out.println("get random code=" + randomCode + "\npattern=" + pattern);
return randomCode;
}
下面给上测试代码
public static void main(String[] args) {
String testMatcher = getRandomCode(
"验证码为:",
"验证码为:1234,回复到100836,回复到13800138000",
",回复到");
System.out.println("testMatcher = " + testMatcher);
}
如果使用贪婪匹配的话,输出内容为

这显然不是我们想要的
下面使用懒惰匹配,输出内容为

得到了正确的结果
总结:大概懒惰匹配,见名知意,就是匹配到第一个就结束吧
本文介绍了如何利用正则表达式的贪婪匹配与懒惰匹配来准确地从文本中提取验证码。通过具体的代码示例,展示了两种匹配方式的区别,并强调了在实际应用中选择合适匹配策略的重要性。
5299

被折叠的 条评论
为什么被折叠?



