Class PatternKit


public class PatternKit extends RegexValidator
正则相关工具类 常用正则请见 Validator
Since:
Java 17+
Author:
Kimi Liu
  • Field Details

    • RE_KEYS

      public static final Set<Character> RE_KEYS
      正则中需要被转义的关键字
  • Constructor Details

    • PatternKit

      public PatternKit()
  • Method Details

    • getGroup0

      public static String getGroup0(String regex, CharSequence content)
      获得匹配的字符串,获得正则中分组0的内容
      Parameters:
      regex - 匹配的正则
      content - 被匹配的内容
      Returns:
      匹配后得到的字符串,未匹配返回null
    • getGroup1

      public static String getGroup1(String regex, CharSequence content)
      获得匹配的字符串,获得正则中分组1的内容
      Parameters:
      regex - 匹配的正则
      content - 被匹配的内容
      Returns:
      匹配后得到的字符串,未匹配返回null
    • get

      public static String get(String regex, CharSequence content, int groupIndex)
      获得匹配的字符串
      Parameters:
      regex - 匹配的正则
      content - 被匹配的内容
      groupIndex - 匹配正则的分组序号
      Returns:
      匹配后得到的字符串,未匹配返回null
    • get

      public static String get(String regex, CharSequence content, String groupName)
      获得匹配的字符串
      Parameters:
      regex - 匹配的正则
      content - 被匹配的内容
      groupName - 匹配正则的分组名称
      Returns:
      匹配后得到的字符串,未匹配返回null
    • getGroup0

      public static String getGroup0(Pattern pattern, CharSequence content)
      获得匹配的字符串,获得正则中分组0的内容
      Parameters:
      pattern - 编译后的正则模式
      content - 被匹配的内容
      Returns:
      匹配后得到的字符串,未匹配返回null
    • getGroup1

      public static String getGroup1(Pattern pattern, CharSequence content)
      获得匹配的字符串,获得正则中分组1的内容
      Parameters:
      pattern - 编译后的正则模式
      content - 被匹配的内容
      Returns:
      匹配后得到的字符串,未匹配返回null
    • get

      public static String get(Pattern pattern, CharSequence content, int groupIndex)
      获得匹配的字符串,对应分组0表示整个匹配内容,1表示第一个括号分组内容,依次类推
      Parameters:
      pattern - 编译后的正则模式
      content - 被匹配的内容
      groupIndex - 匹配正则的分组序号,0表示整个匹配内容,1表示第一个括号分组内容,依次类推
      Returns:
      匹配后得到的字符串,未匹配返回null
    • get

      public static String get(Pattern pattern, CharSequence content, String groupName)
      获得匹配的字符串
      Parameters:
      pattern - 匹配的正则
      content - 被匹配的内容
      groupName - 匹配正则的分组名称
      Returns:
      匹配后得到的字符串,未匹配返回null
    • get

      public static void get(Pattern pattern, CharSequence content, Consumer<Matcher> consumer)
      在给定字符串中查找给定规则的字符,如果找到则使用Consumer处理之 如果内容中有多个匹配项,则只处理找到的第一个结果。
      Parameters:
      pattern - 匹配的正则
      content - 被匹配的内容
      consumer - 匹配到的内容处理器
    • getAllGroups

      public static List<String> getAllGroups(Pattern pattern, CharSequence content)
      获得匹配的字符串匹配到的所有分组
      Parameters:
      pattern - 编译后的正则模式
      content - 被匹配的内容
      Returns:
      匹配后得到的字符串数组,按照分组顺序依次列出,未匹配到返回空列表,任何一个参数为null返回null
    • getAllGroups

      public static List<String> getAllGroups(Pattern pattern, CharSequence content, boolean withGroup0)
      获得匹配的字符串匹配到的所有分组
      Parameters:
      pattern - 编译后的正则模式
      content - 被匹配的内容
      withGroup0 - 是否包括分组0,此分组表示全匹配的信息
      Returns:
      匹配后得到的字符串数组,按照分组顺序依次列出,未匹配到返回空列表,任何一个参数为null返回null
    • getAllGroups

      public static List<String> getAllGroups(Pattern pattern, CharSequence content, boolean withGroup0, boolean findAll)
      获得匹配的字符串匹配到的所有分组
      Parameters:
      pattern - 编译后的正则模式
      content - 被匹配的内容
      withGroup0 - 是否包括分组0,此分组表示全匹配的信息
      findAll - 是否查找所有匹配到的内容,false表示只读取第一个匹配到的内容
      Returns:
      匹配后得到的字符串数组,按照分组顺序依次列出,未匹配到返回空列表,任何一个参数为null返回null
    • getAllGroupNames

      public static Map<String,String> getAllGroupNames(Pattern pattern, CharSequence content)
      根据给定正则查找字符串中的匹配项,返回所有匹配的分组名对应分组值
       pattern: (?<year>\\d+)-(?<month>\\d+)-(?<day>\\d+)
       content: 2021-10-11
       result : year: 2021, month: 10, day: 11
       
      Parameters:
      pattern - 匹配的正则
      content - 被匹配的内容
      Returns:
      命名捕获组,key为分组名,value为对应值
    • extractMulti

      public static String extractMulti(Pattern pattern, CharSequence content, String template)
      从content中匹配出多个值并根据template生成新的字符串 例如: content 2013年5月 pattern (.*?)年(.*?)月 template: $1-$2 return 2013-5
      Parameters:
      pattern - 匹配正则
      content - 被匹配的内容
      template - 生成内容模板,变量 $1 表示group1的内容,以此类推
      Returns:
      新字符串
    • extractMulti

      public static String extractMulti(String regex, CharSequence content, String template)
      从content中匹配出多个值并根据template生成新的字符串 匹配结束后会删除匹配内容之前的内容(包括匹配内容) 例如: content 2013年5月 pattern (.*?)年(.*?)月 template: $1-$2 return 2013-5
      Parameters:
      regex - 匹配正则字符串
      content - 被匹配的内容
      template - 生成内容模板,变量 $1 表示group1的内容,以此类推
      Returns:
      按照template拼接后的字符串
    • extractMultiAndDelPre

      public static String extractMultiAndDelPre(Pattern pattern, Mutable<CharSequence> contentHolder, String template)
      从content中匹配出多个值并根据template生成新的字符串 匹配结束后会删除匹配内容之前的内容(包括匹配内容) 例如: content 2013年5月 pattern (.*?)年(.*?)月 template: $1-$2 return 2013-5
      Parameters:
      pattern - 匹配正则
      contentHolder - 被匹配的内容的Holder,value为内容正文,经过这个方法的原文将被去掉匹配之前的内容
      template - 生成内容模板,变量 $1 表示group1的内容,以此类推
      Returns:
      新字符串
    • extractMultiAndDelPre

      public static String extractMultiAndDelPre(String regex, Mutable<CharSequence> contentHolder, String template)
      从content中匹配出多个值并根据template生成新的字符串 例如: content 2013年5月 pattern (.*?)年(.*?)月 template: $1-$2 return 2013-5
      Parameters:
      regex - 匹配正则字符串
      contentHolder - 被匹配的内容的Holder,value为内容正文,经过这个方法的原文将被去掉匹配之前的内容
      template - 生成内容模板,变量 $1 表示group1的内容,以此类推
      Returns:
      按照template拼接后的字符串
    • delFirst

      public static String delFirst(String regex, CharSequence content)
      删除匹配的第一个内容
      Parameters:
      regex - 正则
      content - 被匹配的内容
      Returns:
      删除后剩余的内容
    • delFirst

      public static String delFirst(Pattern pattern, CharSequence content)
      删除匹配的第一个内容
      Parameters:
      pattern - 正则
      content - 被匹配的内容
      Returns:
      删除后剩余的内容
    • replaceFirst

      public static String replaceFirst(Pattern pattern, CharSequence content, String replacement)
      替换匹配的第一个内容
      Parameters:
      pattern - 正则
      content - 被匹配的内容
      replacement - 替换的内容
      Returns:
      替换后剩余的内容
    • delLast

      public static String delLast(String regex, CharSequence text)
      删除匹配的最后一个内容
      Parameters:
      regex - 正则
      text - 被匹配的内容
      Returns:
      删除后剩余的内容
    • delLast

      public static String delLast(Pattern pattern, CharSequence text)
      删除匹配的最后一个内容
      Parameters:
      pattern - 正则
      text - 被匹配的内容
      Returns:
      删除后剩余的内容
    • delAll

      public static String delAll(String regex, CharSequence content)
      删除匹配的全部内容
      Parameters:
      regex - 正则
      content - 被匹配的内容
      Returns:
      删除后剩余的内容
    • delAll

      public static String delAll(Pattern pattern, CharSequence content)
      删除匹配的全部内容
      Parameters:
      pattern - 正则
      content - 被匹配的内容
      Returns:
      删除后剩余的内容
    • delPre

      public static String delPre(String regex, CharSequence content)
      删除正则匹配到的内容之前的字符 如果没有找到,则返回原文
      Parameters:
      regex - 定位正则
      content - 被查找的内容
      Returns:
      删除前缀后的新内容
    • delPre

      public static String delPre(Pattern pattern, CharSequence content)
      删除正则匹配到的内容之前的字符 如果没有找到,则返回原文
      Parameters:
      pattern - 定位正则模式
      content - 被查找的内容
      Returns:
      删除前缀后的新内容
    • findAllGroup0

      public static List<String> findAllGroup0(String regex, CharSequence content)
      取得内容中匹配的所有结果,获得匹配的所有结果中正则对应分组0的内容
      Parameters:
      regex - 正则
      content - 被查找的内容
      Returns:
      结果列表
    • findAllGroup1

      public static List<String> findAllGroup1(String regex, CharSequence content)
      取得内容中匹配的所有结果,获得匹配的所有结果中正则对应分组1的内容
      Parameters:
      regex - 正则
      content - 被查找的内容
      Returns:
      结果列表
    • findAll

      public static List<String> findAll(String regex, CharSequence content, int group)
      取得内容中匹配的所有结果
      Parameters:
      regex - 正则
      content - 被查找的内容
      group - 正则的分组
      Returns:
      结果列表
    • findAll

      public static <T extends Collection<String>> T findAll(String regex, CharSequence content, int group, T collection)
      取得内容中匹配的所有结果
      Type Parameters:
      T - 集合类型
      Parameters:
      regex - 正则
      content - 被查找的内容
      group - 正则的分组
      collection - 返回的集合类型
      Returns:
      结果集
    • findAllGroup0

      public static List<String> findAllGroup0(Pattern pattern, CharSequence content)
      取得内容中匹配的所有结果,获得匹配的所有结果中正则对应分组0的内容
      Parameters:
      pattern - 编译后的正则模式
      content - 被查找的内容
      Returns:
      结果列表
    • findAllGroup1

      public static List<String> findAllGroup1(Pattern pattern, CharSequence content)
      取得内容中匹配的所有结果,获得匹配的所有结果中正则对应分组1的内容
      Parameters:
      pattern - 编译后的正则模式
      content - 被查找的内容
      Returns:
      结果列表
    • findAll

      public static List<String> findAll(Pattern pattern, CharSequence content, int group)
      取得内容中匹配的所有结果
      Parameters:
      pattern - 编译后的正则模式
      content - 被查找的内容
      group - 正则的分组
      Returns:
      结果列表
    • findAll

      public static <T extends Collection<String>> T findAll(Pattern pattern, CharSequence content, int group, T collection)
      取得内容中匹配的所有结果
      Type Parameters:
      T - 集合类型
      Parameters:
      pattern - 编译后的正则模式
      content - 被查找的内容
      group - 正则的分组
      collection - 返回的集合类型
      Returns:
      结果集
    • findAll

      public static void findAll(Pattern pattern, CharSequence content, Consumer<Matcher> consumer)
      取得内容中匹配的所有结果,使用Consumer完成匹配结果处理
      Parameters:
      pattern - 编译后的正则模式
      content - 被查找的内容
      consumer - 匹配结果处理函数
    • count

      public static int count(String regex, CharSequence content)
      计算指定字符串中,匹配pattern的个数
      Parameters:
      regex - 正则表达式
      content - 被查找的内容
      Returns:
      匹配个数
    • count

      public static int count(Pattern pattern, CharSequence content)
      计算指定字符串中,匹配pattern的个数
      Parameters:
      pattern - 编译后的正则模式
      content - 被查找的内容
      Returns:
      匹配个数
    • indexOf

      public static MatchResult indexOf(String regex, CharSequence content)
      找到指定正则匹配到字符串的开始位置
      Parameters:
      regex - 正则
      content - 字符串
      Returns:
      位置,null表示未找到
    • indexOf

      public static MatchResult indexOf(Pattern pattern, CharSequence content)
      找到指定模式匹配到字符串的开始位置
      Parameters:
      pattern - 模式
      content - 字符串
      Returns:
      位置,null表示未找到
    • lastIndexOf

      public static MatchResult lastIndexOf(String regex, CharSequence content)
      找到指定正则匹配到第一个字符串的位置
      Parameters:
      regex - 正则
      content - 字符串
      Returns:
      位置,null表示未找到
    • lastIndexOf

      public static MatchResult lastIndexOf(Pattern pattern, CharSequence content)
      找到指定模式匹配到最后一个字符串的位置
      Parameters:
      pattern - 模式
      content - 字符串
      Returns:
      位置,null表示未找到
    • getFirstNumber

      public static Integer getFirstNumber(CharSequence stringWithNumber)
      从字符串中获得第一个整数
      Parameters:
      stringWithNumber - 带数字的字符串
      Returns:
      整数
    • replaceAll

      public static String replaceAll(CharSequence content, String regex, String replacementTemplate)
      正则替换指定值 通过正则查找到字符串,然后把匹配到的字符串加入到replacementTemplate中,$1表示分组1的字符串 例如:原字符串是:中文1234,我想把1234换成(1234),则可以:
       replaceAll("中文1234", "(\\d+)", "($1)"))
       结果:中文(1234)
       
      Parameters:
      content - 文本
      regex - 正则
      replacementTemplate - 替换的文本模板,可以使用$1类似的变量提取正则匹配出的内容
      Returns:
      处理后的文本
    • replaceAll

      public static String replaceAll(CharSequence content, Pattern pattern, String replacementTemplate)
      正则替换指定值 通过正则查找到字符串,然后把匹配到的字符串加入到replacementTemplate中,$1表示分组1的字符串
      Parameters:
      content - 文本
      pattern - Pattern
      replacementTemplate - 替换的文本模板,可以使用$1类似的变量提取正则匹配出的内容
      Returns:
      处理后的文本
    • replaceAll

      public static String replaceAll(CharSequence text, String regex, FunctionX<Matcher,String> replaceFun)
      替换所有正则匹配的文本,并使用自定义函数决定如何替换 replaceFun可以通过Matcher提取出匹配到的内容的不同部分,然后经过重新处理、组装变成新的内容放回原位。
           replaceAll(this.content, "(\\d+)", parameters -> "-" + parameters.group(1) + "-")
           // 结果为:"ZZZaaabbbccc中文-1234-"
       
      Parameters:
      text - 要替换的字符串
      regex - 用于匹配的正则式
      replaceFun - 决定如何替换的函数
      Returns:
      替换后的文本
    • replaceAll

      public static String replaceAll(CharSequence text, Pattern pattern, FunctionX<Matcher,String> replaceFun)
      替换所有正则匹配的文本,并使用自定义函数决定如何替换 replaceFun可以通过Matcher提取出匹配到的内容的不同部分,然后经过重新处理、组装变成新的内容放回原位。
           replaceAll(this.content, "(\\d+)", parameters -> "-" + parameters.group(1) + "-")
           // 结果为:"ZZZaaabbbccc中文-1234-"
       
      Parameters:
      text - 要替换的字符串
      pattern - 用于匹配的正则式
      replaceFun - 决定如何替换的函数,可能被多次调用(当有多个匹配时)
      Returns:
      替换后的字符串
    • escape

      public static String escape(char c)
      转义字符,将正则的关键字转义
      Parameters:
      c - 字符
      Returns:
      转义后的文本
    • escape

      public static String escape(CharSequence content)
      转义字符串,将正则的关键字转义
      Parameters:
      content - 文本
      Returns:
      转义后的文本
    • group

      public static String group(Matcher matcher, String name)
      根据提供的匹配器和组名尝试获取匹配的字符串 此方法旨在方便地从匹配器中提取指定名称的组匹配的字符串。如果指定的组不存在,则通过捕获异常并返回null来优雅地处理错误。
      Parameters:
      matcher - 匹配器对象,用于查找和匹配文本。
      name - 组的名称,用于指定要提取的匹配字符串的组。
      Returns:
      如果找到并成功提取了指定组的匹配字符串,则返回该字符串;如果组不存在,则返回null。