正则表达式非捕获组字符长度

3

我正在尝试生成一个具有以下模式的正则表达式。 最多16位数字,可能包含逗号,但不能在开头或结尾。 我尝试过以下内容:

^(?:\d+(?:,{1}\d+){1})$

问题在于我无法计算一个{0,16}范围内的数字结果。 以下是应该适合表达式的数字列表:
123、34 1、33333333 1222222233
以下是不适合的示例数字:
1111,1111,1111 ,11111 11111, 11111111111111111111111111111,111111111111111(超过16个字符)
2个回答

1

在进行实际匹配之前,您可以使用正则表达式 ^(?=[\d,]{1,16}$)(?:\d+(?:,\d+)?)$ 来检查长度。

这是一个先行断言,它在进行实际匹配之前检查长度。


0
如果您的正则表达式支持前瞻断言,那么可以使用以下代码:
^(?!(?:\d{17,}$|[,\d]{18,}$))(?:\d+(?:,\d+)?)$

在Regexr上这里

我去掉了多余的{1}并让带分数的组可选。

负向先行断言(?!(?:\d{17,}$|[,\d]{18,}$))正在检查您的长度要求。如果它发现到末尾有17个或更多数字,或者18个或更多数字和逗号,则会失败。在此处允许字符类中有多个逗号并不是问题,因为以下模式确保只有一个逗号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接