2008-10-06 45 views
7

我想用正则表达式匹配浮点十进制数。在小数点之前可能有或没有数字,并且小数可能存在也可能不存在,如果存在,它可能在数字后面也可能没有数字。 (对于此应用程序,不允许使用前导+/-或尾随“E123”)。我写了这个正则表达式:如何检查正则表达式中两个子表达式中至少有一个是否匹配?

/^([\d]*)(\.([\d]*))?$/ 

哪个正确匹配下面:

1 
1. 
1.23 
.23 

然而,这也匹配空字符串,或只是一个小数点的字符串,我不想。

目前我在运行正则表达式后检查$ 1或$ 3的长度大于0.如果不是,它是无效的。有没有一种方法可以直接在正则表达式中执行此操作?

+0

它在Java中,但我在这里发布它,就好像它是Perl,因为Java的正则表达式引擎是对人类尊严的侮辱。 – Kip 2008-10-06 14:02:28

回答

6

我认为这会做你想做的。它以数字开头,在这种情况下,小数点和数字后面的数字是可选的,或者以小数点开始,在这种情况下至少需要一位数字。

/^\d+(\.\d*)?|\.\d+$/ 
+0

正则表达式引擎不支持+?我冒昧地将代码更改为如果您知道肯定支持的情况下您将拥有的代码。 – 2008-10-06 14:09:58

+0

我正在考虑一些版本的grep,sed和ed,但原始的海报可能使用了更近的一些东西。在使用GNU工具的Unix系统开始的人们看来,这是其中一种习惯。我也使用zcat代替tar的-z选项。 – Glomek 2008-10-06 14:36:43

0

为每个案例创建一个正则表达式并对它们进行OR运算。那么你只需要测试表达式是否匹配。

/^(\d+(\.\d*)?)|(\d*\.\d+)$/ 
相关问题