2012-07-11 126 views
3

我需要檢查的preg_match輸入,它必須是此格式:xxx.xxx.xxx 塊的數量可以改變......這些都是有效輸入所有的例子:regexp匹配xxx.xxx.xxx?

001 
00a.00a 
0fg.001 
aaa.aaa.001 
001.001.002.001.001.001 

清楚,我是大概寫一個正則表達式類似於:

^([\da-z]{3}\.?)+$ 

但是,這裏出現的問題與量詞的時期。我的意思是如果我使用'?'匹配0或1次,這也將匹配即使某處跳過點,如:

000.001.0010az001 

然後,如果我用{1}來一次匹配,它將匹配什麼,因爲最後一塊做沒有點。

所以我想不出怎麼想的?請指點

+0

你不需要在點的前一個反斜槓逃脫它?即:'^([\ da-z] {3} \。?)+ $' – javanut13 2012-07-11 11:14:33

+0

是的,我打錯了,已經編輯。 – Anonymous 2012-07-11 11:15:00

回答

0
/^(?:[\da-z]{3}\.)*[\da-z]{3}$/ 
+0

感謝您的快速回復!但我只是想知道爲什麼我們需要'?',如果沒有它,它會不會起作用?... – Anonymous 2012-07-11 11:25:17

+0

是的,那只是[非匹配組](http://stackoverflow.com/questions/3512471/non -capturing基團)。 – Bergi 2012-07-11 11:27:12

+0

嗯,我很困惑...你能給我一些提示嗎? ; P – Anonymous 2012-07-11 11:28:31

4

您可以使用:

^[\da-z]{3}(?:\.[\da-z]{3})*$