2011-07-08 35 views
2

表達我想要得到這樣的匹配:定期對版本號

3.1.0 
10.5.1 
0.5 

這可能代表構建版本編號系統。

不匹配:

3.1. 

我想這正則表達式:

[0-9]+\.[0-9]+ 

這隻0.5但不10.5.1得到。

回答

14

\d+(?:\.\d+)+ 
+1

這就是我想要的,而你的舊的'\ d +(?:\。\ d +){1,2}'是好的,可以作爲'\ d +(?:\。\ d +){1,100}'作爲可接受的方法。 –

+0

你的遭遇和我一樣的陷阱(即匹配'10.5.'):http://regexhero.net/tester/?id=f9dc4e62-06db-4a53-a60a-e3291cf33c29 – Mrchief

+0

@Mrchief:不,你的舊(與'*')也匹配尾部'.'。雖然我的不是 – zerkms

0

試試這個:

那這
[0-9]+\.[0-9]+(?:\.[0-9]+)? 
+0

1.'(?:'2.這將匹配即使是'10.5.',這只是不正確 – zerkms

+0

好吧,它適用於三重數字,但我們不能保證即使這將匹配「1.2.3.4.5.6」作爲不管有多少個數/浮點數/數字,格式(number.number ...等等) –

+0

@LordCover:我的火柴是1.2.3.4.5.6' ;-) http://rubular.com/r/RVn8dSF1Pm – zerkms

0

我想這應該更有意義:

^(?:0|[1-9][0-9]*)(?:\.(0|[1-9][0-9]*))*$ 

每個數字分量已經開始與非零如果它超過1位數。

+0

不幸的是,它可能是010.5.3,所以它確實不是一個完整版本的系統,但非常喜歡它。 –

+0

@LordCover沒關係。那麼我會爲zerkms的答案投票。 ;) – shinkou

+0

我也是,謝謝。 –

3

這個怎麼樣?

^\d{1,3}\.\d{1,3}(?:\.\d{1,6})?$ 

這將匹配Major.Minor和可選修訂版。 Major和Minor可以是1-3位數字(0-999),修訂可以是6位數字。

有效: 1.1 1.2.3 1.2.123456

無效: 1.2。 1.2.1234567 1.2。* 任何一個字母字符

0

這可能是一個老話題,但我發現了同樣的問題,有點找到簡單的解決方案,以便這可能幫助別人尋找一個答案。 這(\[0-9\]+\[\.\]?)+將匹配這些:

7.1.1 
12.1.1.3.12.442.5463.343.44.5 
9 
11.1.1 
11.1.1 

另外,如果有人想獲得唯一的數字(或者拆就點) 這將這樣的伎倆:

[0-9]+[\.]?? 

regexhero

0

沒有完全測試,但這是人們:-)

(?<major>\d+)(?<minor>:\.\d+)?(?<build>:\.\d+)?(?<revision>:\.\d+)?