代码之家  ›  专栏  ›  技术社区  ›  IAdapter

单个匹配中的正则表达式计数

  •  0
  • IAdapter  · 技术社区  · 16 年前

    我想检查字符串中的数字是否不超过5个。我可以这样做:

    Matcher matcher = Pattern.compile("\\d").matcher(val);
    i = 0;
    while (matcher.find()) {
        i++;
    }
    

    不过,我希望不用花时间就可以做到这一点(因为我们使用的是regex验证框架)。 我希望能够像这样匹配字符串

    A2sad..3f,3,sdasad2..2

    3 回复  |  直到 16 年前
        1
  •  3
  •   Bart Kiers    16 年前

    此正则表达式匹配最多包含5个数字的字符串:

    ^(\D*\d){0,5}\D*$
    

    如果要匹配正好由5个数字组成的字符串,请执行以下操作:

    ^(\D*\d){5}\D*$
    

    请注意,在java.lang.String文本中,需要转义反斜杠:

    boolean match = "A2sad..3f,3,sdasad2..2".matches("(\\D*\\d){0,5}\\D*");
    

    或:

    boolean match = "A2sad..3f,3,sdasad2..2".matches("(\\D*\\d){5}\\D*");
    

    ^ $ matches(...) 已经完成了字符串的完全匹配。

        2
  •  2
  •   Gumbo    16 年前

    ^\D*(?:\d\D*){0,5}$
    

    \d 是个位数 \D 是它的补码,所以除了数字以外的任何字符。 (?:…) 与普通分组类似,只是其子匹配项不能被引用。

        3
  •  1
  •   reko_t    16 年前

    一种方法是使用负面展望:

    ^(?!(?:\D*\d){6})