1

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

typedef struct Node *pNode;

以及 C++ 中的一个示例:

class BigNumber 
{ 
    // Class stuff here.
};

查看方式Nodetypedef struct(关键字)的突出显示方式不同,并且*pNode根本没有突出显示。我如何编写一个正则表达式来检测它,并突出显示我当前文档中所有出现Node的地方?BigNumber

4

1 回答 1

3

虽然正则表达式会给你很好的结果,但它们永远不会给你完美的结果。

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

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

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

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

"^\s*typedef\s+struct\s+\w+\s+((\*?\s*)\w+)\s*;\s*$"
于 2009-07-16T18:49:46.510 回答