正则表达式:.匹配字符串.
String regex = "\s+(\w+)\s+(\d+)\s+.+";//分组匹配 String str = " 100000000001 13357725855 Aug 17 2014 7:55PM 综治e通组合-2014 "; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(str); System.out.println("length:" + str.length()); System.out.println(m.matches()); // System.out.println(m.find()); System.out.println(m.group()); System.out.println("start:" + m.start()); System.out.println("end:" + m.end());
Matcher类:
matches()方法:尝试将整个区域与模式匹配(API)
即使用正则表达式匹配整个字符串。如果匹配成功可以
start()获取匹配到字符串的开始索引
end()方法获取匹配到字符串结束索引
group()方法获取匹配到的字符串
因为matches()方法是对整个字符串匹配,因此start索引为0,end索引为length-1,group则是整个字符串
find()方法:尝试查找与该模式匹配的输入序列的下一个子序列(API)
此方法从匹配器区域的开头开始,如果该方法的前一次调用成功了并且从那时开始匹配器没有被重置,则从以前匹配操作没有匹配的第一个字符开始。
find方法是从整个字符串索引0开始,查找与正则表达式匹配的子字符串。
总结:
group()方法返回上次匹配到的字符串,因此没有调用matches()方法或是find()方法会报异常。
上述实例:
匹配时字符串时,类似游标在字符串上移动。调用matches或是find后,如有匹配到的结果,游标移动到匹配到字符串的结尾
regex完全匹配字符串str,调用find()和matches()都是匹配检测,匹配完整字符串。
调用matches返回true,再调用find方法返回false,因为游标已经移动到字符串结尾
开发建议:
正则表达式完全匹配字符串
正则表达式使用分组
使用matches()方法检测