正则表达式
Matcher类中matches(),find(),lookingAt()进行模式匹配的区别比较
-
matches:整个匹配,只有整个字符序列完全匹配成功,才返回True,否则返回False。但如果前部分匹配成功,将移动下次匹配的位置。
-
lookingAt:部分匹配,总是从第一个字符进行匹配,匹配成功了不再继续匹配,匹配失败了,也不继续匹配。
-
find:部分匹配,从当前位置开始匹配,直到找到一个匹配的子串结束,将移动下次匹配的位置。
如果匹配成功,可以调用start,end,group方法查看匹配子串的详细信息。
-
reset:给当前的Matcher对象配上个新的目标,目标是就该方法的参数;如果不给参数,reset会把Matcher设到当前字符串的开始处。
例子说明:
Pattern p=Pattern.compile("\\d{3,5}");
//String s="123-34345-234-000";
String s="123-343456-234-000";
//特别注意上面的字符串验证结果的输出!!!
Matcher m = p.matcher(s);
System.out.println(m.matches()); //123- false已经分析到第四个字符了,下次匹配从第四个字符-343456-234-000开始分析除非reset
//m.reset();
System.out.println(m.find()); //true
System.out.println(m.start()); //4 (从0开始计数) 如果匹配失败那么调用start失败
System.out.println(m.group()); //34345
System.out.println(m.find()); //true
System.out.println(m.start()+"-"+m.end()); //11-14 注意这里返回从6-234-000找到匹配成功的子串的开始位置
System.out.println(m.group()); //234
System.out.println(m.find()); //000
System.out.println(m.start()); //14
System.out.println(m.find()); //没有找到相应的字符
匹配起始位置与结束位置的说明
注意:如果找到与正则表达式相匹配的字符,如果个数正好是5,那么m.end()就是对应的第六个字符的位置,如果第六个位置起有任然满足匹配条件,与下一个匹配字符串开始的位置是相同,即相应的下一检测位置就是符合条件的下一个位置的start位置
举例说明:
Pattern p=Pattern.compile("\\d{3,5}");
String str="0123456789";
Matcher m=p.matcher(str);
System.out.println(m.matches()); //false
m.reset();
System.out.println(m.find()); //true
System.out.println(m.start()+"-"+m.end()); //0-5
System.out.println(m.group()); //012345
System.out.println(m.find()); //true
System.out.println(m.start()+"-"+m.end()); //5-10
System.out.println(m.group()); //56789
阅读(1255) | 评论(0) | 转发(0) |