答案 0 :(得分:2)
查看 in action 。
(?=^\d*\.?\d*$)^(\.?\d){64}$
(?=^\d*\.?\d*$) # Can contain maximum one dot in total between digits
^(\.?\d){64}$ # Match exactly 64 digits, dot is optional
第二行使其匹配总共64位数,可选择任意数量的点。第一行排除多个点的字符串。因此,正则表达式为您提供由64位数字和最多1个点组成的字符串。
2352352363463456346444651346546213165498546516854985213242135355
.2352352363463456346444651346546213165498546516854985213242135355
235235236346345634644.4651346546213165498546516854985213242135355
235.2352363463456346444651346546213165498546516854985213242135355
23523523634634563464446513465462131654985.46516854985213242135355
235235236346345634644465134654621316549854651685498521324213535
2352352363463456346444651346546213165498546516854985213242135355.
..235235236346345634644465134654621316549854651685498521324213535
..2352352363463456346444651346546213165498546516854985213242135355
23523523.63463456346444651346546213165498.546516854985213242135355
23523523.63463456346444651346546213165498.54651685498521324213535
答案 1 :(得分:1)
试试这个正则表达式:
^\d{64}$
但是如果您需要十进制数字的精度为64(正如您所说的正则表达式所示),如下面的示例所示,
235235236346345634644.4651346546213165498546516854985213242135355
235.2352363463456346444651346546213165498546516854985213242135355
23523523634634563464446513465462131654985.46516854985213242135355
在小数点之前和之后可能有一个可变位数,但总共为64,那么最好使用字符串操作从数字中删除小数点,然后应用上面的正则表达式进行验证(或者只是验证字符串的长度。)
如果你真的坚持正则表达式,你可以试试这个:
^((?:[1-9]\d{63})|(?:(?=[\d.]{65})(?![\d.]{66})(?:[1-9]\d*|0)\.\d*[1-9]))$
细分:
(?:[1-9]{64})
:这涵盖了所有数字,没有小数点。|
:大逻辑OR。(?=[\d.]{65})
:正面预测只允许数字和点数,并确保输入中的总字符数不少于65. (?![\d.]{66})
:否定前瞻,仅允许数字和点数,并确保输入中的总字符数不超过65。(?:[1-9]\d*|0)
:小数点前的数字不应该有前面的零,除非它是唯一的数字。\.
:强制小数点只发生一次而不是更多(正如前瞻所允许的那样)。\d*[1-9]
:确保小数点后的数字不以零结尾。匹配:
235235236346345634644.4651346546213165498546516854985213242135355
235.2352363463456346444651346546213165498546516854985213242135355
23523523634634563464446513465462131654985.46516854985213242135355
2352352363463456346444651346546213165498546516854985213242135355
0.465168549852132421353551545656456489155456651654654245646564558
2.465168549852132421353551545656456489155456651654654245646564558
并不匹配:
0352352363463456346444651346546213165498546516854985213242135355
23523523634634563464446513465462131654985.46516854985213242100000
00.46516854985213242135355154565645648915545665165465424564656454
2352352363463456346444651346546213165498546516854985213242
(PS:虽然我不赞成这个,尝试它很有趣。)
我在Rubular link上测试了不同的输入。
@ acheong87在评论中的积极前瞻帮助我引出了这个正则表达式。
答案 2 :(得分:0)
用{n,m}替换*,其中n是最小匹配,m是最大匹配,例如{0,64}
或者是的,如果你想要完全匹配64(不低于),你可以{64}。
答案 3 :(得分:0)
试试这个正则表达式:http://regex101.com/r/qM9mO8
/^(?:\d{64}|(?=.*\.)(?!.*\..*\.)[\d.]{64})$/gm
此正则表达式适用于64个连续数字或63位数和1个点。
考虑到你的表情,我认为这就是你要找的东西。
祝你好运!