范围1到9223372036854775807,带有正则表达式

时间:2014-11-05 14:34:13

标签: regex

我正在努力使这个工作,它几乎在那里但不完全!

我需要能够允许范围从19223372036854775807

我有以下正则表达式:

^([1-9][0-9]{0,18}|9223372036854775807)$

这允许我输入我想要的范围内的值,但它也允许我转到9999999999999999999是否可以轻松阻止它转到9223372036854775807

2 个答案:

答案 0 :(得分:6)

不要使用正则表达式。它效率低,而且比任何人都可以编写的任何整数解析逻辑都要差。

为了示范,请到这里:

^(?:[1-9][0-9]{0,17}|[1-8][0-9]{18}|9(?:[01][0-9]{17}|2(?:[01][0-9]{16}|2(?:[0-2][0-9]{15}|3(?:[0-2][0-9]{14}|3(?:[0-6][0-9]{13}|7(?:[01][0-9]{12}|20(?:[0-2][0-9]{10}|3(?:[0-5][0-9]{9}|6(?:[0-7][0-9]{8}|8(?:[0-4][0-9]{7}|5(?:[0-3][0-9]{6}|4(?:[0-6][0-9]{5}|7(?:[0-6][0-9]{4}|7(?:[0-4][0-9]{3}|5(?:[0-7][0-9]{2}|80[0-7]))))))))))))))))$

相反,使用您正在使用的语言的标准库将其解析为整数,并使用值检查(>运算符等)。

答案 1 :(得分:0)

对于像这样的大量检查,

bc非常快:

while read -p "Enter value: " a; do [[ $(echo "9223372036854775807 - $a" | bc) -gt 0 ]] && echo good || echo bad; done