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++ 变量结构的正则表达式是否更好?

4

3 回答 3

2

选项之一:

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

在Rubular上在线玩。

于 2012-10-18T14:13:30.557 回答
2

^(\w+|::)(::|.)\w+.\w+

试试看。您可以按字面意思使用“::”来匹配两个“:”

于 2012-10-18T14:11:22.350 回答
1

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

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

编辑:更全面的解释

如果你考虑一个字符类,它只是一种编写组的特殊方式:

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

等同于:

[a-g]

因此,通过使用一组额外的字符,您将获得相同的效果。

于 2012-10-18T14:08:29.550 回答