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

标签 c++ c visual-studio regex gedit

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

typedef struct Node *pNode;

还有一个 C++ 示例:

class BigNumber 
{ 
    // Class stuff here.
};

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

最佳答案

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

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

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

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

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

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

关于c++ - 正则表达式检测 typedef/class 关键字之后的任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1139480/

相关文章:

c++ - 按位运算的性能下降

c - 在 linux 上写入映射内存时使用 mmap 返回共享内存

C++ - 从结束地址获取函数的起始地址/获取函数的大小

c++ - 为什么我会收到此错误 : expected ')' before '&' token?

c++ - 尽管命名空间不同,但重载函数的调用是不明确的

c++ - 如何编写快速(低级)代码?

c - 带有 %s 的 scanf 仅返回字符串的第一个字符

C++如何使用参数化构造函数实例化对象?

c# - TFSBuild 2013 无法更改 msbuild 版本

c++ - Qt 样式表中的属性组合