我正在尝试使用下一个模式生成正则表达式。 一个最多16位的数字,可以有或不包含逗号,从不在开头,从不在最后。 我试过这个:
^(?:\d+(?:,{1}\d+){1})$
问题在于我无法计算组{0,16}的结果。 这是一个适合表达式的数字列表:
123,34
1,33333333
1222222233
不适合的示例数字:
1111,1111,1111
,11111
11111,
11111111111111111111111111111,111111111111111(超过16 字符)
答案 0 :(得分:1)
您可以在此之前检查长度或使用^(?=[\d,]{1,16}$)(?:\d+(?:,\d+)?)$
这是在进行真正匹配之前检查长度的前瞻。
答案 1 :(得分:0)
如果你的正则表达式支持先行断言,你可以使用:
^(?!(?:\d{17,}$|[,\d]{18,}$))(?:\d+(?:,\d+)?)$
我删除了多余的{1}
,并使该部分成为可选的部分。
负前瞻断言(?!(?:\d{17,}$|[,\d]{18,}$))
正在检查您的长度要求。如果它找到17个或更多数字直到结束或者18个或更多个数字和逗号直到结束它失败。我在字符类中允许多个逗号不是问题,以下模式只能确保一个逗号。