首页 > 解决方案 > 正则表达式:如何在 Java 中过滤具有通配符支持的名字?

问题描述

我正在尝试实现一个 API 来搜索用户名,支持通配符。

例如:如果我有 2 个用户:Ankur 和 Ankit,那么以下正则表达式支持是有效的:

  1. An*k - > Ankur 和 Ankit
  2. An*t -> Ankit
  3. An*k -> Ankur
  4. A * n *i -> Ankur
  5. A * n *t -> Ankit

我尝试了以下正则表达式:

 public static void main(String[] args)
  {
    String input = "A*n*i";
    Pattern pattern = Pattern.compile("(^\\*?)(\\w+)(\\*?)(\\w+)(\\*?)");
    Matcher matcher = pattern.matcher(input);
    while (matcher.find())
    {
        System.out.println(matcher.group(1));
        System.out.println(matcher.group(2));
        System.out.println(matcher.group(3));
        System.out.println(matcher.group(4));
        System.out.println(matcher.group(5)); 
        // Does not capture character i.
    }
}

当两者之间只有一个 * 时,正则表达式起作用。现在,如果两者之间的星号数量增加,那么我无法获得这些星号之间的字符。

字符之间的星号可以重复多次,因此我需要您帮助设计一个可以捕获所有这些星号之间的字符的正则表达式。

标签: javaregex

解决方案


推荐阅读