jdk中文文档地址: http://www.javaweb.cc/help/JavaAPI1.6/java/util/regex/Pattern.html
基础实现
1. Pattern直接匹配
优点:比较方便、简洁
缺点:模式不能重复使用,使用方式比较单一
boolean b = Pattern.matches("正则表达式规则", "需要匹配的字符串");
2. Matcher匹配
优点:模式可以重复使用,创建多个Matcher。Pattern可以加入需要的属性,Matcher有多种匹配方式和很多内置方法,更灵活、更强大。
缺点:在只需要匹配一次的简单应用上,Pattern直接匹配开销更少
Pattern p = Pattern.compile("正则表达式规则");
Matcher m = p.matcher("需要匹配的字符串");
boolean b = m.matches();
相关知识归纳
Matcher的find(),matches(),lookingAt()方法的区别
- matches()
方法尝试将整个输入序列与该模式匹配。相当于正则加上了边界匹配器符号^& - lookingAt()
尝试将输入序列从头开始与该模式匹配。 相当于正则加上了边界匹配器符号^ - find()
方法扫描输入序列以查找与该模式匹配的下一个子序列。
String matchStr = "zxbzxbzxb";
String reg = "zxb";
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(matchStr);
// matches()
//System.out.println(matcher.matches());// false,匹配整个输入序列不成功
//System.out.println(matcher.start());// 匹配失败,IllegalStateException异常
//System.out.println(matcher.end());// 匹配失败,IllegalStateException异常
// lookingAt()
//System.out.println(matcher.lookingAt());// true 从头开始匹配匹配成功
//System.out.println(matcher.start());// 0
//System.out.println(matcher.end());// 3
// find()
System.out.println(matcher.find());// 匹配成功
System.out.println(matcher.start());// 0
System.out.println(matcher.end());// 3
Matcher使用find()注意点
- 匹配开始位置
此方法从匹配器区域的开头开始,如果该方法的前一次调用成功了并且从那时开始匹配器没有被重置,则从以前匹配操作没有匹配的第一个字符开始。
String matchStr = "zxb";
String reg = "zxb";
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(matchStr);
System.out.println("lookingAt()");
System.out.println(matcher.lookingAt());
System.out.println(matcher.start());
System.out.println(matcher.end());
System.out.println("matches()");
System.out.println(matcher.matches());
System.out.println(matcher.start());
System.out.println(matcher.end());// 3
// 从上一次匹配结果结束位置(matcher.end();// 3)开始,已经超出了输入字符传的范围
System.out.println("find()");
System.out.println(matcher.find());// false
System.out.println(matcher.start());// 匹配失败,IllegalStateException异常
System.out.println(matcher.end());// 匹配失败,IllegalStateException异常
//matcher.reset();// 重置匹配位置,从头开始匹配 也可以使用region(s,e)来设置匹配范围
//System.out.println("find()");
//System.out.println(matcher.find());// true
//System.out.println(matcher.start());// 0
//System.out.println(matcher.end());// 3
返回结果:
lookingAt()
true
0
3
matches()
true
0
3
find()
false