今天由于一个正则的关系,涉及到了贪婪匹配和懒惰匹配,因为对正则表达不是很懂,所以做个笔记
以下是获取验证码的方法
/**
* 从短信内容中获取验证码
* @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);
}
如果使用贪婪匹配的话,输出内容为
这显然不是我们想要的
下面使用懒惰匹配,输出内容为
得到了正确的结果
总结:大概懒惰匹配,见名知意,就是匹配到第一个就结束吧