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

Posted

技术标签:

【中文标题】正则表达式来检测 typedef/class 关键字之后的任何内容?【英文标题】:Regex to detect anything that comes after a typedef/class keyword? 【发布时间】:2009-07-16 18:38:35 【问题描述】:

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

typedef struct Node *pNode;

还有一个 C++ 示例:

class BigNumber 
 
    // Class stuff here.
;

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

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

【讨论】:

这对于 GEdit 插件来说听起来是个好主意。谢谢!

以上是关于正则表达式来检测 typedef/class 关键字之后的任何内容?的主要内容,如果未能解决你的问题,请参考以下文章

SQL中的正则表达式来检测一个或多个数字

如何在 Java 中构建正则表达式来检测字符串的空格或结尾?

使用正则表达式查找幻数

自然语言处理3.4——使用正则表达式检测词组搭配

PCI 合规性正则表达式检测带空格的模式

正则表达式来检测用换行符分隔的日期