正则表达式为多个1000个接受值大于25000且不允许小数

时间:2016-01-22 17:40:33

标签: regex

我有两种组合:

  1. 用于检查1000的多个^[1-9]+[0-9]*000$

  2. 用于检查大于25000的值^\\d{6,}$|^[3-9]\\d{4}$|^2[5-9]\\d{3}$

  3. 当我尝试将两个正则表达式与下面的正向前瞻操作符组合时,

    ^(?=[1-9]+[0-9]*000)(?=\\d{6,}$|^[3-9]\\d{4}$|^2[5-9]\\d{3})*$

    其取值如25000100,35000100,不是1000的倍数。

    是否可以通过一个正则表达式来实现这两种情况?

4 个答案:

答案 0 :(得分:2)

^(2[5-9]\d*|[3-9]\d+|[12]\d{2,})000$

See it in action

这个想法是:

  • 2[5-9]\d* - 25-29之后的可选数字是> = 25
  • [3-9]\d+ - 3-9,其后带有一个或多个数字> 25
  • [12]\d{2,} - 1或2之后带有两位或更多位数的> 25
  • 000 - 最后添加三个零以获得1000个可分割性

答案 1 :(得分:2)

这应该有效

^([1-9]\d{2,}|[3-9]\d|2[5-9])000$

https://regex101.com/r/vJ8xU6/3

答案 2 :(得分:2)

显然任何以000结尾的字符串都是1000的倍数,所以给定一个字符串X000,让我们只担心X.

  • 如果X>> = 3位(匹配[1-9]\d\d\d*),则X000> = 100000> 25000
  • 如果X是2位数且X的第一个数字是> 2(匹配[3-9]\d),然后X000> = 30000> 25000
  • 如果X是2位且X的第一个数字是2而X的第二个数字是> = 5(匹配2[5-9])则X000> = 25000 = 25000。

任何其他可能的X都会导致较小的数字(或者不是数字的东西),所以只需将它们放在一个([1-9]\d\d\d*|[3-9]\d|2[5-9])组中作为前缀。

([1-9]\d\d\d*|[3-9]\d|2[5-9])000

另请参阅https://regex101.com/r/bV1kN3/1

答案 3 :(得分:0)

使用任何数字范围的正则表达式生成器 在开放范围的范围内,只需使用1加0等于数字的数量 较低的范围再加上两个。

对于你的情况,它将是25到1000给出正则表达式 (?:2[5-9]|[3-9]\d|[1-9]\d{2}|1000)

这给出了独特的交替片段。

 (?:
      2 [5-9] 
   |  [3-9] \d 
   |  [1-9] \d{2} 
   |  1000
 )

剥离1000,然后在最大数量的\ d'上添加空心结尾 每次都有效。然后只需要处理你想要的数十万等等。

 (?:
      2 [5-9] 
   |  [3-9] \d 
   |  [1-9] \d{2,} 
 )
 000