1

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

^([2-9]\d[0-9]\d{2,})$

但我需要它从 25 而不是 20 开始,我什至不确定这是否正常工作。

4

5 回答 5

1

你的正则表达式

^([2-9]\d[0-9]\d{2,})$

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

^0*(1\d\d|2[0-4]\d|2[5-9]|[3-9]\d)\d*$

正如你所看到的,这是相当丑陋的。如果您使用某种编程语言,您应该断言它是一个数字 ( ^\d*$) 并检查没有正则表达式的范围。

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

首先我们使用前导0s,因为它们不会改变数字的值。然后我们根据数字的第一个数字进行交替。如果它是 a1我们知道我们需要至少多两个数字才能大于25。如果它是 a2并且第二个数字介于两者之间04我们还需要另一个数字。如果它是25or 以3to开头9,两位数就足够了。在交替之后,我们只允许任意更多的数字。

工作演示。

于 2012-11-29T16:25:50.950 回答
0

您还可以使用正则表达式来检查它的补码:(消除任何不符合条件的东西:即匹配任何小于 25 的东西)

  • 不是任何以-(负面)开头的东西
  • 不是这样的:
    • [0-2]以和开头
    • 紧随其后的是[0-4], 和
    • 后面没有另一个数字(如果后面有另一个数字,那么你有> 200
  • 不是任何包含非数字字符的东西
于 2012-11-29T16:27:44.790 回答
0

在这里测试

^(2[5-9]([0-9])*|[3-9][0-9]+|[1-2][0-9]{2,})$
于 2012-11-29T16:23:29.913 回答
0

这是一个比其他一些更简洁的正则表达式:

^(?!(1\d|2[0-4])$)[1-9]\d+$

你可以在这里测试它:http ://www.rubular.com/r/PGdbtGYsWD

方法是只匹配[1-9]\d+,这将是一个两位或更多位的数字,并在开头使用负前瞻来防止匹配 10 到 24 之间的任何数字。

如果应该允许前导零,只需0*^.

于 2012-11-29T16:35:25.180 回答
0

使用正则表达式模式

^(2[5-9]|[3-9]\d|(?!0)\d{3,})$

或(如果您想允许前导零)

^0*(2[5-9]|[3-9]\d|(?!0)\d{3,})$
于 2012-11-29T16:48:10.603 回答