不包括在文件的注释部分中执行的代码

时间:2014-01-06 14:33:22

标签: regex perl

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

中运行

为此我使用标志,遇到(/ *)时设置flag = 1,遇到(* /)时标志= 0

我的代码

my $input = $ARGV[0]; 
my $flag = 0;

while(<>){
   if($_ =~ "/*" ){
      $flag = 1; 
      }

   if($_ =~ "*/"){
      $flag = 0;
       }
if($flag == 0){
    #execute other code
    }

}

但我不行。它正在考虑所有行都有/ *

2 个答案:

答案 0 :(得分:2)

问题是你正在使用的正则表达式中有* s,你需要转义它们。尝试:

$flag = 0;
while(<>){

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

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

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

}

顺便说一句,你粘贴的代码也有一个缺少的结束括号 我也修好了。

答案 1 :(得分:1)

替代解决方案:

my $input = $ARGV[0]; 
my $flag = 0;

while(<>){
   if($_ =~ "\Q/*\E" ){
      $flag = 1; 
      }

   if($_ =~ "\Q*/\E"){
      $flag = 0;
       }
if($flag == 0){
    #execute other code
    }

}

\ Q和\ E之间的任何内容都被视为纯文本,所有RegEx特殊字符都被忽略。

替代:如果RegEx不是固定的,而是动态值,请使用quotemeta(参见http://perldoc.perl.org/functions/quotemeta.html)。