2008-10-06 43 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+)$/ 
相關問題