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

时间:2013-01-25 11:20:00

标签: regex comma counting floating regex-group

我正在尝试使用下一个模式生成正则表达式。 一个最多16位的数字,可以有或不包含逗号,从不在开头,从不在最后。 我试过这个:

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

问题在于我无法计算组{0,16}的结果。 这是一个适合表达式的数字列表:

  

123,34
  1,33333333
  1222222233

不适合的示例数字:

  

1111,1111,1111
  ,11111
  11111,
  11111111111111111111111111111,111111111111111(超过16   字符)

2 个答案:

答案 0 :(得分:1)

您可以在此之前检查长度或使用^(?=[\d,]{1,16}$)(?:\d+(?:,\d+)?)$

这是在进行真正匹配之前检查长度的前瞻。

答案 1 :(得分:0)

如果你的正则表达式支持先行断言,你可以使用:

^(?!(?:\d{17,}$|[,\d]{18,}$))(?:\d+(?:,\d+)?)$

here on Regexr

我删除了多余的{1},并使该部分成为可选的部分。

负前瞻断言(?!(?:\d{17,}$|[,\d]{18,}$))正在检查您的长度要求。如果它找到17个或更多数字直到结束或者18个或更多个数字和逗号直到结束它失败。我在字符类中允许多个逗号不是问题,以下模式只能确保一个逗号。