zoukankan      html  css  js  c++  java
  • Java使用正则表达式

    先上示例。正则表达式的使用方法不唯一,下文代码仅供参考。
    简而言之:Pattern类定义正则表达式,Matcher类进行匹配和输出结果。

         Pattern p = Pattern.compile("(c[a-z])[a-z]");
         Matcher m = p.matcher("vacation cost");
         while(m.find())
             System.out.println(m.group(1));//依次输出符合正则表达式第一个括号(c[a-z])字符串的结果
         m.reset();//重置匹配结果
         m.region(5, 12);//设定匹配范围索引[5, 12)
         while(m.find())
             System.out.println(m.group());//依次输出符合整个正则表达式的匹配结果
    

    最重要的两个类是Pattern和Matcher。以下介绍这两个类中的常用方法。

    \[\]

    Pattern类

    Pattern compile(String regex) 将给定的字符串转换为正则匹配模式。要求字符串符合正则表达式规范。

    Pattern compile(String regex, int flags) 增加了flags参数。内容略多,请参考下文:Pattern类中的flags介绍

    boolean matches(String regex, String s) 返回匹配是否成功。

    matcher()

    Pattern p = Pattern.compile("a*b");
    
    Pattern p = Pattern.compile("");//括号内可以写regex,最终计算的regex以matches方法为准
    String reg = "c*b";
    String s = "aaaaab";
    boolean isMatch = p.matches(res, s);//false
    
    boolean isMatch = Pattern.matches("a*b", "aaaaaaab");//true
    
    

    \[\]

    Matcher类

    boolean find(int start) 返回是否匹配到一个合法字符串。start缺省时从上一次匹配成功后的位置开始匹配。

    boolean matches() 返回给定串是否完全符合正则表达式。

    boolean lookingAt() 返回给定串的前缀部分是否符合正则表达式。

    find(), lookingAt()和matches()的区别:只要给定字符串的 \([start, end]\) 范围内存在合法串,find()就会返回true;给定字符串的前缀部分(长度任意)满足正则表达式,lookingAt()返回true;给定字符串必须完全符合正则表达式,matches()才会返回true。

    例如:

    Pattern p = Pattern.compile("cat");
    Matcher m = p.matcher("vacation");
    System.out.println(m.matches());//false
    System.out.println(m.find());//true
    System.out.println(m.find());//false
    
    m = p.matcher("catalog");
    System.out.println(m.matches());//false
    System.out.println(m.lookingAt());//true
    
    System.out.println(p.matches("cat", "vacation"));//false
    

    Matcher region(int start, int end) 设定匹配时字符串的上下界,即 \([start, end)\)

    String group() 返回上一次匹配成功时的匹配串。

    String group(int g) 返回对正则表达式中第g个括号内内容的匹配结果。group(0)等价于group()。

    int groupCount() 返回正则表达式中的括号组数

    Matcher reset() 重置匹配状态

    \[\]

    几点补充

    Java检查正则表达式时会保留换行符(但不会自动添加换行符)。举个例子:

            Pattern p = Pattern.compile("q[^u]");
            Matcher m = p.matcher("q\n");
            while(m.find())
                System.out.println(m.group()); //输出q
    

    可以看到,Java将\n也视作一个字符,因此"q\n"匹配成功。但如果将表达式改为"q",则不会产生匹配结果。

    \[\]

    参考文档

    https://docs.oracle.com/javase/10/docs/api/java/util/regex/Pattern.html
    https://docs.oracle.com/javase/10/docs/api/java/util/regex/Matcher.html
    建议直接阅读文档,更清晰。

  • 相关阅读:
    python join的用法
    python json中的 dumps loads函数
    ubuntu 初始配置
    如何为ubuntu配置java环境
    Ubuntu系统如何安装软件
    取模与取余
    基本数据类型
    js面试题——作用域和闭包
    js面试题-原型和原型链
    js面试题-变量类型和计算
  • 原文地址:https://www.cnblogs.com/kamigen/p/14539704.html
Copyright © 2011-2022 走看看