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

Regex 单个匹配中的正则表达式计数,regex,Regex,我想检查字符串的数字是否不超过5个。我可以这样做: Matcher matcher = Pattern.compile("\\d").matcher(val); i = 0; while (matcher.find()) { i++; } 不过,我希望不用花时间就可以完成(因为我们使用的是regex验证框架)。 我希望能够像这样匹配字符串 A2sad..3f,3,sdasad2..2尝试以下正则表达式: ^\D*(?:\d\D*){0,5}$ \d是一个单个数字,而\d是该数字的补码

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

Matcher matcher = Pattern.compile("\\d").matcher(val);
i = 0;
while (matcher.find()) {
    i++;
}
不过,我希望不用花时间就可以完成(因为我们使用的是regex验证框架)。 我希望能够像这样匹配字符串


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

尝试以下正则表达式:

^\D*(?:\d\D*){0,5}$
\d
是一个单个数字,而
\d
是该数字的补码,因此除了数字以外的任何字符都可以
(?:…)
与普通分组类似,只是其子匹配项不能被引用


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

尝试此正则表达式:

^\D*(?:\d\D*){0,5}$
\d
是一个单个数字,而
\d
是该数字的补码,因此除了数字以外的任何字符都可以
(?:…)
与普通分组类似,只是其子匹配项不能被引用


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

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


您不需要添加“锚定”
^
$
,因为Java的
匹配(…)
已经对字符串进行了完全匹配。

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


您不需要添加“锚定”
^
$
,因为Java的
匹配(…)
已经对字符串进行了完全匹配。

一种方法是使用负前瞻:

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

一种方法是使用消极前瞻:

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

@巴特·K:你怎么会这么想?它在语义上等同于你的。@Bart K:它也会匹配0-4个数字。开头有个a\D*。谢谢,我选择接受巴特K。因为这是最容易理解的。@巴特K:你怎么会这么想?它在语义上等同于你的。@Bart K:它也会匹配0-4个数字。开头有a\D*。谢谢,我选择接受Bart K。因为它最容易理解。我想这就是作者想要的。他只是想确保不超过5位数字。不过,我会将(\d*\d)改为使用非捕获组。速度快了一点(虽然几乎可以忽略不计)。@01,是的,这就是为什么我说“最多5位数”。如果您需要精确匹配5位数字,请将
{0,5}
替换为
{5}
@reko_t,是的,因为它很可能可以忽略不计,为了便于可读,我省略了它。我想这是作者想要的。他只是想确保不超过5位数字。不过,我会将(\d*\d)改为使用非捕获组。速度快了一点(虽然几乎可以忽略不计)。@01,是的,这就是为什么我说“最多5位数”。如果需要精确匹配5位数字,请将
{0,5}
替换为
{5}
@reko_t,是的,因为它很可能可以忽略不计,为了便于可读,我省略了它。