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

原文地址:https://www.cnblogs.com/kzcming/p/14602676.html