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
    建议直接阅读文档,更清晰。

  • 相关阅读:
    centos crash debug
    go get Unknown SSL protocol error in connection to gopkg.in
    Tensorflow serving with Kubernetes
    Spring 集成 Swagger UI
    Docker Registry V2 Garbage Collection
    Docker Registry V2 with Nginx
    Zabbix磁盘性能监控
    Zabbix CPU utilization监控参数
    Windows挂载Gluster复制卷
    Redis持久化存储(三)
  • 原文地址:https://www.cnblogs.com/kamigen/p/14539704.html
Copyright © 2011-2022 走看看