2012-07-11 183 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})*$