正则表达式恰好匹配两个冒号

时间:2012-10-18 14:05:56

标签: regex

我有这些字符串,我想返回正则表达式确认那些模式。

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 ++变量结构?

3 个答案:

答案 0 :(得分:2)

其中一个选项:

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

Rubular上在线播放。

答案 1 :(得分:1)

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

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

编辑:更全面解释

如果你考虑一个角色类,它只是一种专门写作小组的方式:

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

与:

相同
[a-g]

所以通过使用一组来获得额外的角色,你将会实现同样的目标。

答案 2 :(得分:1)

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

试一试。你可以使用" ::"字面意思是匹配两个":"

相关问题