【问题标题】:searching a pattern with cppcheck (pcre) regular expression使用 cppcheck (pcre) 正则表达式搜索模式
【发布时间】: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

标签: regex cppcheck


【解决方案1】:

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

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

输出和grep不完全一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    相关资源
    最近更新 更多