我想检查字符串是否没有超过5个数字。我可以这样做:
Matcher matcher = Pattern.compile("\\d").matcher(val);
i = 0;
while (matcher.find()) {
i++;
}
但是我想在没有的情况下这样做(因为我们正在使用正则表达式验证框架)。 我希望能够匹配像
这样的字符串 A2sad..3f,3,sdasad2..2
答案 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})