我正在学习正则表达式,我正在尝试创建一个验证整数或小数的表达式。
我创建了这个正则表达式:
^(\d+)|([\d+][\.{1}][\d+])$
它几乎可以工作,但它说的数字如下:
12.
12..
12..67
是匹配。
我想
([\d+][\.{1}][\d+])
意味着它必须有一个或多个数字,后跟一个点(只有一个),然后是一个或多个数字。
有人可以解释我做错了什么吗?
作为一个学习过程,我对我做错了什么感兴趣,而不是另一种做法。我试着遵循语法示例,但我错过了一些东西。
答案 0 :(得分:3)
你错了
([\d+][\.{1}][\d+])
使用方括号可以创建字符类。这意味着
[\d+]
表示匹配数字或+
一次。
[\.{1}]
表示匹配.
或{
或1
或}
要获得您期望的行为,请删除方括号
(\d+\.{1}\d+)
这将匹配至少一个数字,.
后跟一个或多个数字
此处的另一个问题是^
仅属于表达式的第一部分,$
仅属于您的更改的最后一部分。所以你应该在完整的交替中加上括号
^((\d+)|(\d+\.{1}\d+))$
如果您不需要捕获组中的匹配项,则可以删除单个替代项周围的括号
^(\d+|\d+\.{1}\d+)$
最后一点,Jens指出
{1}
多余\.{1}
与\.
然后我们在
^(\d+|\d+\.\d+)$
答案 1 :(得分:0)
您可以尝试:
^(\d+(\.\d+)?)$
答案 2 :(得分:0)
你的正则表达式几乎就在那里,你只需要删除方括号 -
^(\d+)|(\d+\.{1}\d+)$
应该为你想要的东西工作。