zoukankan      html  css  js  c++  java
  • java正则表达式一:基本使用

    java正则表达式主要涉及三个类:java.util.regex.Matcher、java.util.regex.Pattern、java.util.regex.PatternSyntaxException

    java.util.regex.Pattern

    该类主要用来创建匹配规则,并没有公共构造函数,通过两个工厂函数构造Pattern对象,实例如下:

     Pattern pattern = Pattern.compile("B(ond)");
     //或者
     Pattern pattern = Pattern.compile("B(ond)", 0);
    

    java.util.regex.Matcher

    引擎类,所有和正则表达式匹配相关的操作均在此类中实现,该类也没有构造函数,构造对象有两种方法:

     Matcher match = pattern.matcher("test string Bond");
     //方法二
     String regex="B(ond)";
     String strs= "test string Bond";
     Matcher mt = Pattern.matches(regex, strs);
    

    实例1:

    
      String strs =  "My name is Bond. James Bond.";
      Pattern pattern = Pattern.compile("B(ond)");
      Matcher matcher = pattern.matcher(strs);
    
      while(matcher.find()){
           System.out.println("group" + 0 + ":" + matcher.group(0));
           
            int gc = matcher.groupCount();
           for(int i = 1; i<= gc; ++i) {
               System.out.println("group" + i + ":" + matcher.group(i));
          }
       }
    

    matcher.find()函数根据正则表示在字符串上从做到右做匹配,匹配一个则返回true,下一次匹配从当前匹配的结尾处开始
    matcher.group(0)分组的概念:整个正则匹配的就是第零组,然后根据左括号一次从左到右为第1、2、3组,在本实例中,正则表达B(ond)有两个组:bond(0组)、ond(第一组),matcher.group(i)返回当前匹配的第i组的字符串
    matcher.groupCount():返回匹配的组的个数,注意这里统计不计第零组
    输出结果如下:

    group0:Bond
    group1:ond

    实例2

    
      String strs =  "My name is Bond. James Bond.";
      Pattern pattern = Pattern.compile("B(ond)");
      Matcher matcher = pattern.matcher(strs);
    
      while(matcher.find()){
           System.out.println("group" + 0 + ":" + matcher.group(0));
           
            int gc = matcher.groupCount();
           for(int i = 1; i<= gc; ++i) {
               System.out.println("group" + i + ":" + matcher.group(i));
          }
       }
       
      matcher.reset();
      if(matcher.matches()){
         System.out.println("all matches:"+ matcher.group(0));
      }else{
         System.out.println("First all matches fail");
      }
    
      matcher = pattern.matcher("Bond");
      if(matcher.matches()){
         System.out.println("all matches:"+ matcher.group(0));
      }
    
    

    实例2同实例1相比,多了几个函数
    第一个mather.reset():将所有与匹配相关的状态重置,重置后的结果跟pattern.matcher(strs);第一次执行完的效果一样
    第二个matcher.matches(),这个函数同matcher.find()函数相比,matches()是在整个字符串上做匹配,整个字符串匹配正则规则才会返回true;而find()是在字符串中做匹配,匹配到一个字符串就返回true,通过group()函数获取匹配的字符串,通过start()以及end()函数可以获取匹配的位置
    输出如下:

    group0:Bond
    group1:ond
    group0:Bond
    group1:ond
    First all matches fail
    all matches:Bond
  • 相关阅读:
    用POP动画模拟真实秒钟摆动效果
    解析苹果的官方例子LazyTableImages实现图片懒加载原理
    支持xcode6的缓动函数Easing以及使用示例
    [转] iOS 动画库 Pop 和 Canvas 各自的优势和劣势是什么?
    NSJSONSerialization能够处理的JSONData
    [翻译] USING GIT IN XCODE [6] 在XCODE中使用GIT[6]
    [翻译] USING GIT IN XCODE [5] 在XCODE中使用GIT[5]
    [翻译] USING GIT IN XCODE [4] 在XCODE中使用GIT[4]
    [翻译] USING GIT IN XCODE [3] 在XCODE中使用GIT[3]
    【转】断点继传
  • 原文地址:https://www.cnblogs.com/graph/p/4542914.html
Copyright © 2011-2022 走看看