如何更改代码格式的 perl 正则表达式?

How do I change the perl regex for code formatting?

我试图理解下面的代码。但我不明白。 基本上,下面的代码当前检查 c 或 cpp 文件中的 if 条件。

if ($perl_version_ok &&
    $line =~ /^\+(.*)\b($Constant|[A-Z_][A-Z0-9_]*)\s*($Compare)\s*($LvalOrFunc)/) {
    # Throw error
}

where Constant is any macro or any constant value; LvalOrFunc is any variable or function call; Compare is the operations like !=, == ,&& , etc

if 检查这样的代码 if(CONST_VALUE == x),其中 CONST_VALUE 是一些宏。在这种情况下,它是 true 并进入 if 条件。

但是我想检查相反的if(x == CONST_VALUE ),然后抛出错误。

请帮助理解这条线以及如何达到预期的结果。

注: 代码来自 linux 内核目录,可在此处获取:https://github.com/torvalds/linux/blob/master/scripts/checkpatch.pl

代码行号:5483

代码 不会 检查 if(CONST_VALUE == x)。如源码中行上方的注释

# comparisons with a constant or upper case identifier on the left
#   avoid cases like "foo + BAR < baz"
#   only fix matches surrounded by parentheses to avoid incorrect
#   conversions like "FOO < baz() + 5" being "misfixed" to "baz() > FOO + 5"

它检查后跟 CONSTANT_VALUE == x 的加号。正则表达式中的 \+ 匹配加号。

$line =~ /^\+(.*)\b($Constant|[A-Z_][A-Z0-9_]*)\s*($Compare)\s*($LvalOrFunc)/
      ^   ^ ^  ^  ^
      |   | |  |  |
binding   | |  |  word
operator  | |  |  boundary
      start |  |
  of string |  |
         plus  | 
        anything

还原比较值应该很容易:

($LvalOrFunc)\s*($Compare)\s*($Constant|[A-Z_][A-Z0-9_]*)