正则表达式检测typedef / class关键字后面的任何内容?

时间:2009-07-16 18:38:36

标签: c++ c visual-studio regex gedit

我一直在玩GEdit的语法高亮。我喜欢Visual Studio突出显示用户创建类型的方式。我想为用户在C / C ++中创建的类型(例如typedef的/ classes)执行此操作。例如(在C中):

typedef struct Node *pNode;

C ++中的一个例子:

class BigNumber 
{ 
    // Class stuff here.
};

查看与Node(关键字)不同的typedef struct突出显示方式,并且*pNode根本不突出显示。如何编写正则表达式来检测它,并在我当前的文档中突出显示NodeBigNumber的所有匹配项?

1 个答案:

答案 0 :(得分:3)

虽然Regex会给你很好的结果,但他们永远不会给你完美的结果。

大多数正则表达式引擎不支持递归的概念。也就是说,它无法匹配任何需要计数的表达式(匹配的括号,parens等......)。这意味着它将无法匹配以可靠方式指向函数指针的typedef。

要获得完美匹配,您需要编写解析器。

我认为更好的方法是选择您最关心的场景,并编写针对这些特定场景的正则表达式。

例如,这里有一个正则表达式,它将匹配结构的typedef,这些结构指向一个名称,可能有也可能没有指针。

"^\s*typedef\s+struct\s+\w+\s+((\*?\s*)\w+)\s*;\s*$"