gpt4 book ai didi

有效 32 位有符号整数的正则表达式

转载 作者:行者123 更新时间:2023-12-04 18:43:01 27 4
gpt4 key购买 nike

我很确定这个网站实际上还没有得到回答。一劳永逸地,与 32 位有符号整数范围内的数字字符串匹配的最小正则表达式是什么,范围是 -21474836482147483647 .

我必须使用正则表达式进行验证 - 这是我唯一可用的选项。

我试过了

\d{1,10}

但我不知道如何将其限制在有效的数字范围内。

为了帮助开发正则表达式,它应该匹配:
-2147483648
-2099999999
-999999999
-1
0
1
999999999
2099999999
2147483647

它不应该匹配:
-2147483649
-2200000000
-11111111111
2147483648
2200000000
11111111111

我已经建立了一个在线 live demo (在 rubular 上)有我的尝试和上面的测试用例。

注意:将接受有效的最短正则表达式。不会考虑正则表达式的效率(除非最短长度有平局)。

最佳答案

我真的希望它只是一个谜题,在现实世界中没有人会使用正则表达式来解决这个问题。正确的解决方案是将数字从字符串转换为数字类型,如 BigInteger .这应该允许我们使用适当的方法或运算符检查其范围,例如 compareTo , > , < .

为了让生活更轻松,您可以使用 this page (死链接)为范围生成正则表达式。所以范围的正则表达式 0 - 2147483647可以看起来像
\b([0-9]{1,9}|1[0-9]{9}|2(0[0-9]{8}|1([0-3][0-9]{7}|4([0-6][0-9]{6}|7([0-3][0-9]{5}|4([0-7][0-9]{4}|8([0-2][0-9]{3}|3([0-5][0-9]{2}|6([0-3][0-9]|4[0-7])))))))))\b
(更友好的方式)

\b(
[0-9]{1,9}|
1[0-9]{9}|
2(0[0-9]{8}|
1([0-3][0-9]{7}|
4([0-6][0-9]{6}|
7([0-3][0-9]{5}|
4([0-7][0-9]{4}|
8([0-2][0-9]{3}|
3([0-5][0-9]{2}|
6([0-3][0-9]|
4[0-7]
)))))))))\b

和范围 0 - 2147483648 \b([0-9]{1,9}|1[0-9]{9}|2(0[0-9]{8}|1([0-3][0-9]{7}|4([0-6][0-9]{6}|7([0-3][0-9]{5}|4([0-7][0-9]{4}|8([0-2][0-9]{3}|3([0-5][0-9]{2}|6([0-3][0-9]|4[0-8])))))))))\b
所以我们可以组合这些范围并将其写为
range of 0-2147483647 OR "-" range of 0-2147483648
这会给我们
\b([0-9]{1,9}|1[0-9]{9}|2(0[0-9]{8}|1([0-3][0-9]{7}|4([0-6][0-9]{6}|7([0-3][0-9]{5}|4([0-7][0-9]{4}|8([0-2][0-9]{3}|3([0-5][0-9]{2}|6([0-3][0-9]|4[0-7])))))))))\b|-\b([0-9]{1,9}|1[0-9]{9}|2(0[0-9]{8}|1([0-3][0-9]{7}|4([0-6][0-9]{6}|7([0-3][0-9]{5}|4([0-7][0-9]{4}|8([0-2][0-9]{3}|3([0-5][0-9]{2}|6([0-3][0-9]|4[0-8])))))))))\b .

[编辑]

由于 Bohemian 在他的评论中注意到最后的正则表达式可以是形式 -?regex1|-2147483648所以这里是更短的版本(也将 [0-9] 改为 \d )
^-?(\d{1,9}|1\d{9}|2(0\d{8}|1([0-3]\d{7}|4([0-6]\d{6}|7([0-3]\d{5}|4([0-7]\d{4}|8([0-2]\d{3}|3([0-5]\d{2}|6([0-3]\d|4[0-7])))))))))$|^-2147483648$
如果您将在 Java 中使用它 String#matches(regex)每行的方法你也可以跳过 ^$部分,因为它们将被自动添加以确保整个字符串与正则表达式匹配。

我知道这个正则表达式非常难看,但只是说明了为什么 正则表达式不是用于范围验证的好工具 .

关于有效 32 位有符号整数的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20793578/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com