数字正则表达式帮助

时间:2011-08-10 09:43:17

标签: regex

我正在学习正则表达式,我正在尝试创建一个验证整数或小数的表达式。

我创建了这个正则表达式:

^(\d+)|([\d+][\.{1}][\d+])$

它几乎可以工作,但它说的数字如下:

12. 
12..
12..67

是匹配。

我想

([\d+][\.{1}][\d+])

意味着它必须有一个或多个数字,后跟一个点(只有一个),然后是一个或多个数字。

有人可以解释我做错了什么吗?

作为一个学习过程,我对我做错了什么感兴趣,而不是另一种做法。我试着遵循语法示例,但我错过了一些东西。

3 个答案:

答案 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+)$

应该为你想要的东西工作。