• 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
  • 相关阅读:
    CodeQL分析python代码2分析python代码的CodeQL库
    CodeQL分析python代码5python中的控制流
    VxWorks
    Qt 宽字符串中文乱码(codec>toUnicode值得学习)
    C++ complex复数类用法详解
    C++ 傅里叶变换 推导
    Qt QDomDocument读写XML文件
    C++ 离散傅里叶变换
    C++ 复数的实现
    C++ wchar_t介绍以及和string类型的转换
  • 原文地址:https://www.cnblogs.com/graph/p/4542914.html
Copyright © 2020-2023  润新知