我需要一个正则表达式来表示一个从25开始的整数,没有我尝试过的限制:
^([2-9]\d[0-9]\d{2,})$但我需要它从25开始,而不是20,我甚至不确定这是否正确。
发布于 2012-11-30 00:35:25
下面是一个regex,它比其他一些regex稍微简洁一些:
^(?!(1\d|2[0-4])$)[1-9]\d+$你可以在这里测试它:http://www.rubular.com/r/PGdbtGYsWD
方法是只匹配[1-9]\d+,它将是一个两位或两位以上的数字,并在开头使用negative lookahead,以防止匹配10到24之间的任何数字。
如果允许使用前导零,只需在^后面直接添加0*即可。
发布于 2012-11-30 00:25:51
您的正则表达式
^([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*$),并在不使用正则表达式的情况下检查范围。
但是我的正则表达式是如何工作的呢?
首先,我们使用前导0,因为它们不会改变数字的值。然后,我们有一个取决于数字的第一个数字的交替。如果它是一个1,我们知道我们至少需要两位数才能大于25。如果它是一个2,并且第二个数字在0和4之间,我们还需要另一个数字。如果是25或以3到9开头,两位数就足够了。在交替之后,我们只允许任意多个数字。
Working demo.
发布于 2012-11-30 00:23:30
测试它here
^(2[5-9]([0-9])*|[3-9][0-9]+|[1-2][0-9]{2,})$https://stackoverflow.com/questions/13630097
复制相似问题