regex - 如何使用正则表达式扫描在 .c 文件中定义具有初始大写卡梅尔案例名称的静态变量的代码行?
问题描述
我正在使用正则表达式在代码审查期间自动在代码库中强制执行编码样式。我无法想出正则表达式来扫描 .c 文件中以大写字母开头的静态变量和函数名,因为扫描模式非常复杂和动态,即在“静态”和变量名之间可以是 int 等数据类型,也可以是 const 等关键字。
我目前的解决方案如下所示:
^\s*static\s((const|inline|volatile)\s)?(unsigned\s)?[a-zA-Z0-9_]+\s\*?[A-Z].*$
它适用于许多模式,但当数据类型也以大写字母开头时,它会出现误报。例如,即使“variableName”以小写字母开头,“static volatile Data_type variableName”也是正数。
这里还有一些例子:
/* positives */
static void ZVar_Able(void)
static void Variable
static const int_64 Variable
static MyDataType_t DefinedVariable =
static const unsigned int INIT_VARIABLE = someValue;
static void GivenVariable(uint32_t para)
static __attribute__ ((naked)) void Function(int_64 param)
static void Var_Var_var_var(void)
/* negatives */
static const char hex[] = "000000"
static uint8_t variableHandler(uint32_t argc, char **argv)
static volatile Data_type variable
static void variable
static int *variable
static char *variablename = "just a name";
static inline void variable_enable(void)
static volatile bool_t variableIsVariable;
static const Variabletype_t definedVariable =
任何想法或替代方案都会非常有帮助!提前致谢!
解决方案
你可以试试这个伙伴
^\s*static\s(?:(const|inline|volatile|void)\s)?(unsigned\s)?([A-Za-z_]\w+\s[A-Z]\w+)$
解释
^
- 匹配字符串的开头。\s*
- 匹配空间零次或多次。static\s?
- 匹配static
或static
。(?:(const|inline|volatile|void)\s)?
- 匹配const
orinline
或volatile
orvoid
后跟一个空格。(?使其可选)。(unsigned\s)?
- 比赛unsigned
。([A-Za-z_]\w+\s[A-Z]\w+)
- 匹配任何以字母开头,后跟一个或多个单词字符,后跟空格,后跟一个大写字母,后跟一个或多个字符的内容。$
- 字符串结束。
推荐阅读
- python - 仅在一个 jupyter 笔记本中没有名为 cv2 的模块
- android - 如何将抽象与 ViewBinding 与基本活动一起使用?
- elasticsearch - Elastic Search 同义词 - 删除操作
- r - 根据 R 中的另一个分组从分组变量中选择样本
- python - 如何在逐行移动时在python中使用apply函数
- javascript - PDF.js 在 ios 中显示空白页
- react-native - React-native 和 ASP.Net 核心 RestfulAPI 之间的通信
- java - 如何在不使用 getter 和 setter 的情况下显示另一个类的变量?
- python - python清除unittest.mock完整历史
- c++ - 在 OpenGL 中使用 Qt3D 离屏渲染纹理