2014-01-08 60 views
0

我写的Perl脚本在C代码我想从内部意见运行排除我的代码执行(/ *和* /)单行注释被排除

$flag = 0; 
while(<>){ 

if($_ =~ /\/\*/){ 
    $flag = 1; 
    } 

if($_ =~ /\*\//){ 
    $flag = 0; 
    } 

if($flag == 0) { 
    execute other code 
    } 
} 

对于像多行注释工作正常

/* 
    ... 
    ... 
*/ 

但是对于单行注释不起作用像

/* this is an example 123 */ 

需要帮助的正则表达式的命令不包括“/ *” 和之间的UDE一切(字符,整数,特殊字符) “* /”

回答

2

试想一下,当你的程序遇到一个单行注释(/* comment */)会发生什么:

  1. 它认为: /*因此它设置flag = 1
  2. 它认为:*/因此它设置flag = 0随即
  3. 标志为0,所以它执行你的“等代码”

试着改变你的if语句的顺序:

$flag = 0; 
while(<>){ 

if($_ =~ /\/\*/){ 
    $flag = 1; 
    } 

if($flag == 0) { 
    execute other code 
    } 

if($_ =~ /\*\//){ 
    $flag = 0; 
    }  
} 

这样你,如果你的行包含/*和依赖这个你“执行其他代码”第一次检查(最好是说:在这种情况下,你不不执行它)。之后,如果在同一行上有*/,则重置标志。

+0

great.it works..thanks –

0

你可以简单地添加更多的语句inisde while循环里面的第一条语句像

$_=~s/\/\*.*?\*\///g; 
+0

这也适用。谢谢 –