要排除的单行注释



我正在编写Perl脚本以在C代码上执行,我想将我的代码排除在注释(/*和*/)中运行

$flag = 0;
while(<>){
if($_ =~ //*/ ){
    $flag = 1; 
    }
if($_ =~ /*//){
   $flag = 0;
    }
if($flag == 0) {
    execute other code
    }
}

这适用于多行注释,例如

/*
  ...
  ...
*/

但不适用于单行注释,例如

/* this is an example 123 */

需要有关正则表达式命令的帮助以排除"/* "和" */" 之间的所有内容(字符,整数,特殊字符)

想象一下,当你的程序遇到单行注释(/* comment */

):
  1. 它看到:/*所以它设置flag = 1
  2. 它看到:*/所以它立即设置flag = 0
  3. 之后
  4. 标志为 0,因此它会执行您的"其他代码"

尝试更改 if 语句的顺序:

$flag = 0;
while(<>){
if($_ =~ //*/ ){
    $flag = 1; 
    }
if($flag == 0) {
    execute other code
    }
if($_ =~ /*//){
   $flag = 0;
    }    
}

通过这种方式,您首先检查您的行是否包含/*并依赖于此"执行其他代码"(最好说:在这种情况下,您不执行它)。之后,如果同一行上有*/,则重置标志。

您可以简单地再添加一个语句 inisde while 循环作为其中的第一个语句,例如

$_=~s//*.*?*///g;

最新更新