与C结构匹配的正则表达式

2024-10-03 11:12:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要一个正则表达式来匹配C结构定义。这是我的目标数据:

typedef struct
{
}dontMatchThis;

typedef struct
{
  union //lets have a union as well
  {
    struct 
    {
     int a
     //a comment for fun

     int b;
     int c;
    };
    char byte[10];
  };
}structA;

我只想匹配structA的定义,从typedef到strunctA。在

我试过: typedef[\s\S]+?structA

但是event虽然我使用了非贪心的修饰符,但是这两个结构是匹配的。 有什么建议吗


Tags: 数据目标定义haveascomment结构struct
3条回答

一般情况下,这是不可能的。typedef或{}可能是由预处理器宏调用生成的(您可以在一个文件中使用typedef,在另一个{}-d文件中有{},或者{}来自一个预处理器宏,而{}来自另一个预处理器宏)。在

相反,我建议扩展或定制GCC编译器,通过插件或MELT扩展(MELT是扩展GCC的一种特定于域的语言)。在

另请参见etags

问题是regexp开始匹配的点。它正确地从第一个typedef开始匹配,一直到structA。在

你想做的事情真的很难(我认为不可能正确地做)。您需要匹配嵌套的大括号以查看结构停止的位置。在

Building a Regex Based Parser。在

我找到了以下作品:

([\s\S])(typedef([\s\S])?structA)

然后选择第二个组,其中包含我的结构。它使用第一个[\s\s]作为贪婪运算符来匹配目标结构之前的所有定义。在

相关问题 更多 >