使用 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 "(&lt;&lt;.*|).*(&gt;&gt;)" t.c,我会得到输出

1:val =  (val1 << 8) | (val >> 8 );
2:val =  (val2 << 16) | (val >> 8 );
3:val =  (val3 << 32) | (val >> 8 );

但是如果用 cppcheck 搜索 ./cppcheck --rule="(&lt;&lt;.*|).*(&gt;&gt;)" t.c 我会得到输出

[../test/t.c:1]: (style) found ' val = ( val1 << 8 ) | ( val >> 8 ) ; val = ( val2 << 16 ) | ( val >> 8 ) ; val = ( val3 << 32 ) | ( val >>'

即显示从第一次匹配开始的整个匹配行。我想要 grep 命令中的结果。

请帮忙

【问题讨论】:

您的规则过于复杂。由于交替运算符|,您只能有效地搜索&gt;&gt;。将更简单的表达式与与 vs 兼容的输出相结合,使用 ./cppcheck --template=vs --rule="&gt;&gt;" t.c。您可以定义自己的模板来格式化输出,请参阅chapter 5 of the manual。 【参考方案1】:

尝试以下命令(转义|):

cppcheck --rule="<<.*?\|.*?>>" t.c

输出和grep不完全一样。

【讨论】:

以上是关于使用 cppcheck (pcre) 正则表达式搜索模式的主要内容,如果未能解决你的问题,请参考以下文章

PHP 正则表达式(PCRE)

CppCheck 自定义规则不显示消息

PCRE-正则库及用法

PHP 正则表达式(PCRE)

雷林鹏分享:PHP 正则表达式(PCRE)

linux下使用pcre库进行正则表达式