如何更改代码格式的 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_]*)
我试图理解下面的代码。但我不明白。 基本上,下面的代码当前检查 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_]*)