2012-10-18 50 views
1

我有这些字符串,我想返回正则表达式确认这些模式。正则表达式恰好匹配两个冒号

NS::varible.child // OK 
variable.child // OK 
NS:variable.child // NO MATCH 
::variablename.child // OK 
:variablename.child // NO MATCH 
_variablename.child.x // OK 
5variablename.child.x // NO MATCH 

我想C++变量名不匹配 - >运算符和模板<>

我想出了这个正则表达式。

[a-z\_:{2,2}A-Z][a-z\_A-Z0-9\.:{2,2}]* 

:{2,2}似乎没有做我想做的事。它也接受一个单一的冒号。

如何检查两个冒号?更好的正则表达式来匹配C++变量结构?

+0

'::'有什么问题?我的意思是你为什么不在你的正则表达式中使用它? – ppeterka

+0

它也匹配单: – mikbal

+0

哦,我的哑巴,误读你的正则表达式。在一秒钟内...... – ppeterka

回答

2

选项之一:上Rubular

/^((::)?[_a-zA-Z.]+)+$/ 

发挥与它在线。

+0

不错的网站:) 我做了必要的改进,接受我想要的 ^((::)?[_ a-zA-Z] [_ a-z0-9A-Z。] +)+ $ – mikbal

1

就像@Wiseguy说的你不能在字符类中使用特殊字符([])。正确的解决方法是使用一组你的文字和字符类之间交替:

([a-zA-Z]|::) 

编辑:更充分地说明

如果你想在字符类的写作只是一种专门方法一组反正:

(a|b|c|d|e|f|g) 

是相同的:

[a-g] 

所以通过使用一个额外的字符组,你会达到同样的目的。

+0

糟糕!我明白了,它在'['''''一秒内'。将编辑。 – Crisfole

1

^(\ w + | ::)(:: |)。\ w + \ W +

给一个尝试。您可以使用“::”的字面匹配两个“:”