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

时间:2010-03-26 10:06:04

标签: regex

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

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

但是我想在没有的情况下这样做(因为我们正在使用正则表达式验证框架)。 我希望能够匹配像

这样的字符串

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

3 个答案:

答案 0 :(得分:3)

此正则表达式匹配包含最多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*");

并且您不需要添加“锚点”^$,因为Java的matches(...)已经完全匹配字符串。

答案 1 :(得分:2)

试试这个正则表达式:

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

\d是一个数字,\D是对此的补充,因此除了数字之外的任何字符。 (?:…)类似于普通分组,但不能引用其子匹配。

此正则表达式允许在开头使用任何非数字字符,后跟最多五个单个数字的序列,后跟可选的非数字字符。

答案 2 :(得分:1)

一种方法是使用否定预测:

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