2011-08-10 38 views
2

我正在學習正則表達式,我正在嘗試創建一個將驗證整數或小數的表達式。數正則表達式幫助

我創造了這個正則表達式:

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

它幾乎工作,但它說了一些像:

12. 
12.. 
12..67 

的比賽。

我想

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

意味着它必須有一個或多個數字,後面跟着一個點(也是唯一一個),然後是一個或多個數字。

有人可以解釋我做錯了什麼嗎?

作爲一個學習過程,我感興趣的是我做錯了什麼,而不是另一種做法。我嘗試了下面的語法示例,但我錯過了一些東西。

+0

可能重複的[如何使用正則表達式檢測浮點數](http://stackoverflow.com/questions/2293780/how-to-detect-a-floating-point-number-using-a-正則表達式) – robert

+0

我刪除了我的答案,因爲它不好!但您可以查看此頁面http://regexlib.com/DisplayPatterns.aspx?cattabindex=2&categoryId=3&AspxAutoDetectCookieSupport=1 – undone

回答

3

你錯了

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

用方括號在創建人物類。這意味着

[\d+]確實意味着匹配數字或+一次。

[\.{1}]是否意味着匹配.{1}

爲了得到你所期望去掉方括號

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

這將匹配至少一個數字的行爲,一.後跟一個或多個數字

這裏的另一個問題是^只屬於第一個pa你的表情的rt和$只屬於你的改變的最後部分。所以,你應該把括號完整交替

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

如果您不需要比賽以捕獲組可以去掉周圍的單一替代括號

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

截至上點作爲延注意

{1}是多餘\.{1}\.

那麼同樣我們在

^(\d+|\d+\.\d+)$ 
+0

請注意,「{1}」是多餘的。 – Jens

+0

@Jens是對的我還在想這個表情中的其他東西 – stema

+0

@stema謝謝你的全面解釋!那正是我所期待的。知道我所做的是錯誤的是一回事,但理解錯誤的原因是下次學習如何做的關鍵! – Bex

0

你可以嘗試:

^(\d+(\.\d+)?)$ 
0

你的正則表達式是幾乎沒有,你只需要刪除的方括號 -

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

如果你想要的東西的工作。