• java 中的正则使用


    java 中的正则使用

    说明:在 java 中使用正则,主要是 java.util.regex.Patternjava.util.regex.Matcher 这两个类相关

    常用的调用匹配正则的方法

    • String#matches(arg1)
        // 可以看到内部也是调用的 Pattern#matches(arg1,arg2) 方法
        public boolean matches(String regex) {
                return Pattern.matches(regex, this);
            }
      
    • Pattern#matches(arg1,arg2)
        // 直接调用 Pattern#matches(arg1,arg2) 方法
        public static boolean matches(String regex, CharSequence input) {
                Pattern p = Pattern.compile(regex);
                Matcher m = p.matcher(input);
                return m.matches();
            }
      
    • Pattern#compile(arg1) -> Pattern#matcher(arg1)
        // 或者 像Pattern#matches(arg1,arg2) 方法,内部的代码实现一样,
        // 先 Pattern#compile(arg1) 获得Pattern 对象,在调用 Pattern#matcher(arg1) 获得 Matcher 对象
        public static Pattern compile(String regex) {
                return new Pattern(regex, 0);
            }
      

    说明:这几个方法的实质其实时一样的,都是传入 要匹配的对象和正则表达式,先获得Pattern对象,
    然后通过Pattern#matcher(arg1) 获得Matcher 对象,直接返回 Matcher#matches() 的结果,
    Matcher#matches() 对于传入的某个字符串的全部 与 正则表达式 进行匹配. 但是一些其他的操作就不是很方便了,
    比如说 进行组匹配,查询,搜索等操作就不容易实现

    正则表达式的组匹配 或 其他操作

    如何实现,还是通过Pattern#compile(arg1) 获得 Pattern 对象,然后 Pattern#matcher(arg1) 获得 Matcher 对象,此时在通过具体的方法去执行对应的匹配判断
    比如:查询一个组查询,此时可以通过 Matcher#find() 方法,去查询 字符串 中 符合 正则表达式 组(字符串片段)有几处

    Matcher 三个匹配方法的区别

    • matcher 完全匹配
    • find 尝试查找与模式匹配的输入序列的下一个子序列。这个方法从这个匹配器区域的开头开始,或者,如果之前的方法调用成功且匹配器此后没有重置,则从前一个匹配项不匹配的第一个字符开始。
    • lookingAt 尝试匹配输入序列(从区域的开头开始)与模式.与matches方法一样,该方法总是从区域的开始处开始;与该方法不同,它不要求匹配整个区域。
      说明:这三个方法都返回 boolean 来指示是否匹配成功

    关于匹配组

    具体请查看 Pattern 类注释中 Groups and capturing 部分
    例如: (d{1}|d{2})(,(d{1}|d{2})){6}
    从组的规则来说应该有4个组, 第一个 是默认的 0 索引代表的 整个输入字符串算一个组, 第二个 从左往右看 (d{1}|d{2})
    第三个 (,(d{1}|d{2})) ,第四个 (d{1}|d{2}) ,但是由于第二个和第四个重合时一样的,因此算一个,因此匹配组的时候,返回的 groupCount() 数量就是3,

    一些正则表达式的例子

    [^0-9\.] 验证非数字和小数点
    2\d{3}(\-\d{2}){2}\s+\d{2}(\:\d{2}){2} 表示 yyyy-MM-dd HH:mm:ss 时间格式
    (d{1}|d{2})(,(d{1}|d{2})){6} 验证数字格式,例如:01,7,02,03,05,06,7

  • 相关阅读:
    【leetcode】字符串轮转
    【leetcode】URL化
    【leetcode】学生出勤记录 I
    【leetcode】子域名访问计数
    【leetcode】整数的各位积和之差
    【leetcode】另一个树的子树
    【leetcode】查询后的偶数和
    【leetcode】左叶子之和
    【leetcode】从根到叶的二进制数之和
    【leetcode】平方数之和
  • 原文地址:https://www.cnblogs.com/kzcming/p/14602676.html
Copyright © 2020-2023  润新知