使用 cppcheck (pcre) 正则表达式搜索模式
Posted
技术标签:
【中文标题】使用 cppcheck (pcre) 正则表达式搜索模式【英文标题】:searching a pattern with cppcheck (pcre) regular expression 【发布时间】:2013-07-10 09:43:37 【问题描述】:我有一个类似sn-p int t.c的代码
val = (val1 << 8) | (val >> 8 );
val = (val2 << 16) | (val >> 8 );
val = (val3 << 32) | (val >> 8 );
val = (val << 8);
如果我 grep 为 grep -nhE "(<<.*|).*(>>)" t.c
,我会得到输出
1:val = (val1 << 8) | (val >> 8 );
2:val = (val2 << 16) | (val >> 8 );
3:val = (val3 << 32) | (val >> 8 );
但是如果用 cppcheck 搜索 ./cppcheck --rule="(<<.*|).*(>>)" t.c
我会得到输出
[../test/t.c:1]: (style) found ' val = ( val1 << 8 ) | ( val >> 8 ) ; val = ( val2 << 16 ) | ( val >> 8 ) ; val = ( val3 << 32 ) | ( val >>'
即显示从第一次匹配开始的整个匹配行。我想要 grep 命令中的结果。
请帮忙
【问题讨论】:
您的规则过于复杂。由于交替运算符|
,您只能有效地搜索>>
。将更简单的表达式与与 vs 兼容的输出相结合,使用 ./cppcheck --template=vs --rule=">>" t.c
。您可以定义自己的模板来格式化输出,请参阅chapter 5 of the manual。
【参考方案1】:
尝试以下命令(转义|
):
cppcheck --rule="<<.*?\|.*?>>" t.c
输出和grep不完全一样。
【讨论】:
以上是关于使用 cppcheck (pcre) 正则表达式搜索模式的主要内容,如果未能解决你的问题,请参考以下文章