Java 正则表达式 Pattern类和Matcher类

java.util.regex包主要包括三个类:

  • Pattern
  • Matcher
  • PatternSyntaxExcepiton

Pattern类

Pattern对象是一个正则表达式对象。Pattern类没有公共的构造方法。要创建一个Pattern对象,需要调用其公共静态方法。该方法接收一个正则表达式作为它的第一个参数。

常用方法

  • static Pattern compile(String regex):将给定的正则表达式编译到模式中。
  • Matcher matcher(String input):使用创建的规则匹配input字符串。
  • static boolean matches(String regex, CharSequence input)
    :使用传入的正则表达式整体匹配传入的字符串,如果满足返回true。

Matcher类

Matcher对象是对输入字符串进行解释和匹配的引擎。与Pattern类一样,Matcher也没有公共构造方法。需要调用Pattern对象的matcher方法来获得一个Matcher对象。

常用方法

  • boolean find():查找与该正则匹配的字符串的下一个匹配内容。

根据正则的规则,定位到满足条件的字符串,然后将开始索引 记录到Matcher对象的int[] groups 数组中,再把结束索引 + 1 记录到到该数组中;将oldLast 属性的值设置为结束索引+1的值,这个属性表示下次从这个索引的位置开始匹配。每次调用该方法,groups 数组会被重新赋值。
如果正则表达式中有分组,groups 数组也会进行分组记录,数组的第一个索引是开始索引 ,第二个索引是结束索引+1 ,从第三个索引开始,是分组的索引值,也是左闭右开(组的开始索引和组的结束索引+1)。

  • boolean find(int start):重置此匹配器,从指定索引处开始查找与该正则匹配的字符串的下一个匹配内容。

  • String group(int group):返回在以前匹配操作期间捕获的字符串。

根据groups 数组中的索引位置值截取,左开右闭,不包含第二个索引值位置。根据find()方法的特性,该方法的参数如果传0,就是获取正则表达式截取到的所有内容;如果传大于0的值,就是获取分组的内容的值,分组的索引就是从0开始。

  • int start():返回以前匹配的初始索引。

  • int start(int group):返回在以前的匹配操作期间,给定组所捕获的子序列的初始索引。

  • int end():返回匹配的子字符串的结束索引+1。

  • int end(int group):返回在以前的匹配操作期间,给定组所捕获的子序列的结束索引+1。

  • boolean lookingAt():尝试将从区域开头的输入序列与该模式匹配。

  • boolean matches():尝试将整个区域与模式匹配。

  • String replaceAll(String replacement):替换模式与给定替换字符串相匹配的输入序列的每个子序列。

java 复制代码
public static void main(String[] args) {
    String content = "1998年12月8日,第二代Java平台的企业版J2EE发布。1999年6月," +
            "Sun公司发布了第二代Java平台(简称为Java2)的3个版本"";

    // 正则表达式:匹配四个数字,两个数字为一组
    String regex = "(\\d\\d)(\\d\\d)";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(content);
    while (matcher.find()) {
        System.out.println("截取到的字符串:" + matcher.group(0));
        System.out.println("第一组:" + matcher.group(1));
        System.out.println("第二组:" + matcher.group(2));
    }
}

输出结果:

PatternSyntaxException

PatternSyntaxException类是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

相关推荐
梁同学与Android44 分钟前
Android ---【内存优化】常见的内存泄露以及解决方案
android·java·内存泄漏
武子康2 小时前
Java-71 深入浅出 RPC Dubbo 上手 父工程配置编写 附详细POM与代码
java·分布式·程序人生·spring·微服务·rpc·dubbo
武子康4 小时前
Java-72 深入浅出 RPC Dubbo 上手 生产者模块详解
java·spring boot·分布式·后端·rpc·dubbo·nio
_殊途4 小时前
《Java HashMap底层原理全解析(源码+性能+面试)》
java·数据结构·算法
椰椰椰耶5 小时前
【Spring】拦截器详解
java·后端·spring
ob熔天使——武6 小时前
MySQL
数据库·mysql
没有bug.的程序员6 小时前
JAVA面试宝典 - 《MyBatis 进阶:插件开发与二级缓存》
java·面试·mybatis
没有羊的王K8 小时前
SSM框架学习——day1
java·学习
又菜又爱coding8 小时前
安装Keycloak并启动服务(macOS)
java·keycloak
不知道叫什么呀8 小时前
【C】vector和array的区别
java·c语言·开发语言·aigc