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