我想要一个正则表达式来匹配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虽然我使用了非贪心的修饰符,但是这两个结构是匹配的。 有什么建议吗
一般情况下,这是不可能的。}可能是由预处理器宏调用生成的(您可以在一个文件中使用}-d文件中有{},或者{}来自一个预处理器宏,而{}来自另一个预处理器宏)。在
typedef
或{typedef
,在另一个{相反,我建议扩展或定制GCC编译器,通过插件或MELT扩展(MELT是扩展GCC的一种特定于域的语言)。在
另请参见etags
问题是regexp开始匹配的点。它正确地从第一个typedef开始匹配,一直到structA。在
你想做的事情真的很难(我认为不可能正确地做)。您需要匹配嵌套的大括号以查看结构停止的位置。在
见Building a Regex Based Parser。在
我找到了以下作品:
([\s\S])(typedef([\s\S])?structA)
然后选择第二个组,其中包含我的结构。它使用第一个[\s\s]作为贪婪运算符来匹配目标结构之前的所有定义。在
相关问题 更多 >
编程相关推荐