我一直在玩GEdit的语法高亮。我喜欢Visual Studio突出显示用户创建类型的方式。我想为用户在C / C ++中创建的类型(例如typedef的/ classes)执行此操作。例如(在C中):
typedef struct Node *pNode;
C ++中的一个例子:
class BigNumber
{
// Class stuff here.
};
查看与Node
(关键字)不同的typedef struct
突出显示方式,并且*pNode
根本不突出显示。如何编写正则表达式来检测它,并在我当前的文档中突出显示Node
和BigNumber
的所有匹配项?
答案 0 :(得分:3)
虽然Regex会给你很好的结果,但他们永远不会给你完美的结果。
大多数正则表达式引擎不支持递归的概念。也就是说,它无法匹配任何需要计数的表达式(匹配的括号,parens等......)。这意味着它将无法匹配以可靠方式指向函数指针的typedef。
要获得完美匹配,您需要编写解析器。
我认为更好的方法是选择您最关心的场景,并编写针对这些特定场景的正则表达式。
例如,这里有一个正则表达式,它将匹配结构的typedef,这些结构指向一个名称,可能有也可能没有指针。
"^\s*typedef\s+struct\s+\w+\s+((\*?\s*)\w+)\s*;\s*$"