Chinaunix首页 | 论坛 | 博客
  • 博客访问: 71167
  • 博文数量: 33
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 220
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-15 22:22
文章分类

全部博文(33)

文章存档

2016年(3)

2015年(23)

2014年(7)

我的朋友

分类: Java

2015-07-23 13:03:06

正则表达式
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
  




 
阅读(1190) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~