我正在编写Perl脚本以在C代码上执行,我想将我的代码排除在注释(/*和*/)中运行
$flag = 0;
while(<>){
if($_ =~ //*/ ){
$flag = 1;
}
if($_ =~ /*//){
$flag = 0;
}
if($flag == 0) {
execute other code
}
}
这适用于多行注释,例如
/*
...
...
*/
但不适用于单行注释,例如
/* this is an example 123 */
需要有关正则表达式命令的帮助以排除"/* "和" */" 之间的所有内容(字符,整数,特殊字符)
想象一下,当你的程序遇到单行注释(/* comment */
- 它看到:
/*
所以它设置flag = 1
- 它看到:
*/
所以它立即设置flag = 0
之后 - 标志为 0,因此它会执行您的"其他代码"
尝试更改 if 语句的顺序:
$flag = 0;
while(<>){
if($_ =~ //*/ ){
$flag = 1;
}
if($flag == 0) {
execute other code
}
if($_ =~ /*//){
$flag = 0;
}
}
通过这种方式,您首先检查您的行是否包含/*
并依赖于此"执行其他代码"(最好说:在这种情况下,您不执行它)。之后,如果同一行上有*/
,则重置标志。
您可以简单地再添加一个语句 inisde while 循环作为其中的第一个语句,例如
$_=~s//*.*?*///g;