Pattern和Matcher

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值