gpt4 book ai didi

c++ - 正则表达式查找所有用位字段定义的结构

转载 作者:太空宇宙 更新时间:2023-11-04 14:08:15 25 4
gpt4 key购买 nike

我需要在 C++ 代码库中的所有目录中搜索包含位域的结构。我知道这可以用正则表达式来完成,但一直无法组合正确的表达式来完成这个。基本上我需要找到任何出现的 struct*{:},其中“*”是任何字符。提前感谢您的任何建议。

最佳答案

(我忽略了您需要多行匹配这一事实;如何做到这一点与平台和正则表达式实现不同(查看 sed!))。

紧接在 struct 单词之后的 .* 匹配任何内容,包括 { 和 }。因此,字符串 struct s_one {bool a:3;} one; struct s_two {bool b:4} two; 将只是一场比赛。更差, 结构一{ 诠释无位; };

int main(void)
{
return (2>1)?1:0;
}

将匹配,这不是您想要的(注意 main 函数体内的冒号。因此,您应该寻找仅在 struct 和左大括号之间有效的匹配项. 尝试,例如:

struct\s+[a-zA-Z0-9_]+\s*{ [^}]*:[^}]*}

在普通英语中,这将翻译为:“搜索单词 struct,后跟一个或多个空格,后跟仅由给定字符(一个或多个)组成的有效标识符名称它们中的),可选地后跟任意数量的空格,然后是大括号(我们现在在结构的定义中),然后是除了大括号之外的任何文本(< em>我们不想保留定义),在某处有一个冒号,然后是除了大括号之外的任何文本,然后是右括号。

请注意,根据您的解析器,您可能需要转义大括号(它们在 Regex 中有特殊含义)。另请注意,一个更简单的正则表达式也可能就足够了(例如,您可以删除冒号后面的任何内容,它仍然有效),但我写下的内容让您更好地了解如何构建这样一个正则表达式。另请注意,此正则表达式不考虑代码内的任何形式的注释(例如,它不匹配

struct one // my favorite first struct
{
bool a:8;
};

(因为 one//my favorite first struct 与“有效标识符名称”代码 [a-zA-Z0-9_] 不匹配)。

关于c++ - 正则表达式查找所有用位字段定义的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16021715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com