试图修复Regex以匹配以下场景:
- 小数后最多32位
- 二进制的
- 没有前导或尾随零
[0|1]*。?[0-1]+([0-1]{32}(?
Regex应该通过这个:1.001100101,但失败了这个:1.000000000000010
根据您的描述,这个正则表达式应该可以执行您想要的操作:
^1[01]*(?:.[01]{0,31}1)?$
它寻找一个前导1
,后面跟着一些二进制数字([01]
(,然后是一个可选的十进制部分,由一个小数点(.
(,后面跟着最多31个二进制数字([01]{0,31}
(和一个尾部1
组成。
regex101 演示
如果要查找较长字符串中的数字,请将^
和$
替换为断字(b
(。
根据评论更新
如果您还想匹配值0.0
和1.0
(它们不符合原始标准(,您可以将它们作为regex:的替代项添加
^(?:[01].0?|1[01]*(?:.[01]{0,31}1)?)$
regex101 演示
我能想到的最短(也是最简单(的正则表达式是:
^1.[01]{0,31}?1$
这需要在开始处使用1.
,在结束处使用1
,并且还确保小数点后32位的限制(包括最后的强制1
(。
在Regex101上可以看到。