我一直在研究 GEdit 的语法突出显示。我喜欢 Visual Studio 突出显示用户创建的类型的方式。我想为我的用户在 C/C++ 中创建的类型(例如 typedef/类)执行此操作。例如(在 C 中):
typedef struct Node *pNode;
还有一个 C++ 示例:
class BigNumber
{
// Class stuff here.
};
查看 Node
与 typedef struct
(关键字)不同的突出显示方式,*pNode
根本没有突出显示。我如何编写一个正则表达式来检测它,并突出显示当前文档中出现的所有 Node
和 BigNumber
?
最佳答案
虽然正则表达式会给您带来好的结果,但它们永远不会给您完美的结果。
大多数正则表达式引擎不支持递归的概念。也就是说,它不能匹配任何类型的需要计数的表达式(匹配的大括号、parens 等)。这意味着它将无法以可靠的方式匹配指向函数指针的 typedef。
要获得完美匹配,您确实需要编写解析器。
我认为更好的方法是选择您最关心的场景并编写针对这些特定场景的正则表达式。
例如,这里有一个正则表达式,它将匹配指向单个名称的结构的 typedef,并且可能有也可能没有指针。
"^\s*typedef\s+struct\s+\w+\s+((\*?\s*)\w+)\s*;\s*$"
关于c++ - 正则表达式检测 typedef/class 关键字之后的任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1139480/