Regex 不允许接受大于25000和十进制的1000个接受值的倍数的正则表达式

Regex 不允许接受大于25000和十进制的1000个接受值的倍数的正则表达式,regex,Regex,我有两种组合: 用于检查1000的倍数,即^[1-9]+[0-9]*000$ 用于检查大于25000的值,即^\\d{6,}$$^[3-9]\\d{4}$\^2[5-9]\\d{3}$ 当我尝试将两个正则表达式与如下所示的正向前瞻运算符组合时 ^(?=[1-9]+[0-9]*000)(?=\\d{6,}$| ^[3-9]\\d{4}$| ^2[5-9]\\d{3})*$ 其取值为250010035000100,不是1000的倍数 是否可以通过一个正则表达式实现两种场景 ^(2[5-9]\d*|[

我有两种组合:

  • 用于检查1000的倍数,即
    ^[1-9]+[0-9]*000$

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

  • 当我尝试将两个正则表达式与如下所示的正向前瞻运算符组合时

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

    其取值为250010035000100,不是1000的倍数

    是否可以通过一个正则表达式实现两种场景

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

    这个想法是:

    • 2[5-9]\d*
      -25-29,其后为可选数字>=25
    • [3-9]\d+
      -3-9,后面有一个或多个数字>25
    • [12]\d{2,}
      -1或2,后面有两个或多个数字,即>25
    • 000
      -在结尾处添加三个零,表示1000可除性
    这应该行得通

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

    显然,任何以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


    另请参见:

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

    对于您的情况,如果正则表达式为
    (?:2[5-9]|[3-9]\d |[1-9]\d{2}| 1000)

    这提供了独特的交替段

     (?:
          2 [5-9] 
       |  [3-9] \d 
       |  [1-9] \d{2} 
       |  1000
     )
    
    去掉1000,然后在最大数量的\d上添加开口端。
    每次都很有效。然后加上你想要的十位数,000,等等

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

    Try.根据TagWiki:“因为正则表达式没有完全标准化,所以所有带有此标记的问题都应该包括一个指定适用编程语言或工具的标记。”我想知道。为什么要用正则表达式来解决数学问题?与大于199的数字不匹配,000@BrendanAbel会的。你试过了吗
    {2,}
    表示两个或两个以上,而不是两个。我应该更精确一些。它不会匹配以2[0-4]开头的大于199,00的数字,比如234000