Regex 最小整数为25的正则表达式

Regex 最小整数为25的正则表达式,regex,Regex,我需要一个正则表达式,用于从25开始的整数,没有限制,我尝试过: ^([2-9]\d[0-9]\d{2,})$ 但我需要从25开始,而不是20开始,我甚至不确定这是否正确。测试它 测试一下 你的正则表达式 ^([2-9]\d[0-9]\d{2,})$ 将匹配以2-9开头且具有5位或更多位数的任何数字(\d,[0-9]各贡献一位,\d{2,}表示另外两位或更多位数)。你想要这样的东西: ^0*(1\d\d|2[0-4]\d|2[5-9]|[3-9]\d)\d*$ 正如你所看到的,这是相当丑陋

我需要一个正则表达式,用于从25开始的整数,没有限制,我尝试过:

^([2-9]\d[0-9]\d{2,})$
但我需要从25开始,而不是20开始,我甚至不确定这是否正确。

测试它

测试一下

你的正则表达式

^([2-9]\d[0-9]\d{2,})$
将匹配以
2-9
开头且具有5位或更多位数的任何数字(
\d
[0-9]
各贡献一位,
\d{2,}
表示另外两位或更多位数)。你想要这样的东西:

^0*(1\d\d|2[0-4]\d|2[5-9]|[3-9]\d)\d*$
正如你所看到的,这是相当丑陋的。如果您使用的是某种编程语言,则应该断言它是一个数字(
^\d*$
),并检查不带regex的范围

但是我的正则表达式是如何工作的呢

首先,我们使用前导的
0
s,因为它们不会更改数字的值。然后我们根据数字的第一个数字进行替换。如果它是
1
,我们知道至少还需要两位数才能大于
25
。如果是
2
,第二个数字介于
0
4
之间,我们还需要另一个数字。如果是
25
,或者从
3
开始到
9
,两位数就足够了。在交替之后,我们只允许任意多个数字

你的正则表达式

^([2-9]\d[0-9]\d{2,})$
将匹配以
2-9
开头且具有5位或更多位数的任何数字(
\d
[0-9]
各贡献一位,
\d{2,}
表示另外两位或更多位数)。你想要这样的东西:

^0*(1\d\d|2[0-4]\d|2[5-9]|[3-9]\d)\d*$
正如你所看到的,这是相当丑陋的。如果您使用的是某种编程语言,则应该断言它是一个数字(
^\d*$
),并检查不带regex的范围

但是我的正则表达式是如何工作的呢

首先,我们使用前导的
0
s,因为它们不会更改数字的值。然后我们根据数字的第一个数字进行替换。如果它是
1
,我们知道至少还需要两位数才能大于
25
。如果是
2
,第二个数字介于
0
4
之间,我们还需要另一个数字。如果是
25
,或者从
3
开始到
9
,两位数就足够了。在交替之后,我们只允许任意多个数字


您还可以使用正则表达式检查其补码:(排除任何不符合条件的内容:即匹配任何小于25的内容)

  • 不是以
    -
    开头的任何内容(负数)
  • 不包括:
    • [0-2]
      开头,以及
    • 后跟
      [0-4]
      ,以及
    • 后面没有另一个数字(如果后面有另一个数字,则表示您有
      >200
  • 不包括任何包含非数字字符的内容

您还可以使用正则表达式检查其补码:(排除任何不符合条件的内容:即匹配任何小于25的内容)

  • 不是以
    -
    开头的任何内容(负数)
  • 不包括:
    • [0-2]
      开头,以及
    • 后跟
      [0-4]
      ,以及
    • 后面没有另一个数字(如果后面有另一个数字,则表示您有
      >200
  • 不包括任何包含非数字字符的内容

    • 这里有一个比其他一些规则更简洁的正则表达式:

      ^(?!(1\d|2[0-4])$)[1-9]\d+$
      
      您可以在此处进行测试:

      方法是只匹配
      [1-9]\d+
      ,这将是一个两位数或两位数以上的数字,并在开始时使用a来防止匹配10到24之间的任何数字


      如果允许前导零,只需直接在
      ^

      后面添加
      0*
      ,下面是一个比其他一些规则更简洁的正则表达式:

      ^(?!(1\d|2[0-4])$)[1-9]\d+$
      
      您可以在此处进行测试:

      方法是只匹配
      [1-9]\d+
      ,这将是一个两位数或两位数以上的数字,并在开始时使用a来防止匹配10到24之间的任何数字

      如果应该允许前导零,只需在
      ^
      使用正则表达式模式后直接添加
      0*

      ^(2[5-9]|[3-9]\d|(?!0)\d{3,})$
      
      或者(如果要允许前导零)

      使用正则表达式模式

      ^(2[5-9]|[3-9]\d|(?!0)\d{3,})$
      
      或者(如果要允许前导零)


      为什么不把它转换成int并检查一下呢?为什么不仅仅是
      $x>=25
      ?在您选择的语言中,您应该使用一个简单的
      if
      语句来实现这一点。在这种情况下,使用正则表达式解决问题会导致两个问题。正则表达式不是编程的工具。是的,这是在解析出值之后应该进行的验证。只需使用正则表达式就可以得到整数。为什么不将其转换为int并进行检查呢?为什么不使用
      $x>=25
      ?在您选择的语言中,这应该使用一个简单的
      if
      语句。在这种情况下,使用正则表达式解决问题会导致两个问题。正则表达式不是编程的工具。是的,这是在解析出值之后应该进行的验证。只需使用正则表达式就可以得到整数。现在看来它是正确的,但笨拙和缺乏清晰度是我们在OP评论中讨论的一个很好的论据——这是错误的解决方案,即使它有效。这个验证应该在检索整数值之后进行。@Kiyura:我认为这不是很清楚。他根据前两个数字将其分为三种情况,然后确定如果它们形成小于25的数字,则必须有更多的数字跟随它们。我认为,在代码中只需一个简短的注释就足够了。(你不能假设你可以在所有有正则表达式的应用程序中进行整数运算。如果这是一个
      grep
      query呢?)