Pattern和Matcher

来源:互联网 发布:兰州大学怎么样知乎 编辑:程序博客网 时间:2024/06/03 19:45

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

0 0
原创粉丝点击