好吧,我正在尝试制作一个仅允许我使用大于 16 位(二进制)的数字的正则表达式。
也就是说正则表达式允许大于的数字1111 1111 1111 1111
是>= 1 0000 0000 0000 0000
我的表达如下:
(1)* (1|0)* (0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1) (0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)
如果有人可以帮助我验证这一点,我将不胜感激。
好吧,我正在尝试制作一个仅允许我使用大于 16 位(二进制)的数字的正则表达式。
也就是说正则表达式允许大于的数字1111 1111 1111 1111
是>= 1 0000 0000 0000 0000
我的表达如下:
(1)* (1|0)* (0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1) (0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)
如果有人可以帮助我验证这一点,我将不胜感激。
正则表达式很好。我建议只考虑以 1 中最重要的数字开头的数字。这样,以左边 0 开头的数字(对数字没有贡献)被认为是无效的。
我建议使用正闭包 (the
+
) 来确保至少有一个。并且对空格要非常小心,因为您显示的正则表达式存在强制空格存在于数字中的问题。
它看起来像这样:
(1)+(1|0)*(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)
根据这个正则表达式的执行位置(如果它是使用 Javascript 之类的语言或 VisualStudio Code 或 Notepad++ 之类的工具),它们将对语法进行扩展,以便能够以另一种方式表达这 16 位数字。
例如,在 Javascript 中,完全相同的正则表达式可以写成这样:
(1)+(1|0)*(0|1){16}
这显然更简洁。
试试下面的正则表达式:
1[10]{16,}
. 在我看来,更简单。解释:
节目
重要的:
这个解决方案和公认的解决方案都会找到
10000000000000000
里面的数字12310000000000000000321
对于您的情况,这可能不正确,因为那将是十进制数。
如果你需要限制这种情况,你可以使用这个正则表达式:
A) 对于与 PCRE 兼容的正则表达式(如 php、perl、python、...)
(?<!\d)1[10]{16,}(?!\d)
节目
您也可以对这些语言使用选项 B,只是选项 A 更短。
B) 对于与 PCRE 不兼容的正则表达式,不支持后向 (如 javascript)
(?:^|[^\d\n])(1[10]{16,}(?!\d))
在这种情况下,我们将查看第一个捕获组。
节目