单行评论被排除在外

时间:2014-01-08 09:32:03

标签: regex perl

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

$flag = 0;
while(<>){

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

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

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

这适用于多行注释,例如

/*
  ...
  ...
*/

但不适用于

等单行注释
/* this is an example 123 */

需要有关regex命令的帮助,以排除“/ *”和“* /”之间的所有内容(字符,整数,特殊字符)

2 个答案:

答案 0 :(得分:2)

想象一下当您的程序遇到单行评论(/* comment */)时会发生什么:

  1. 它看到:/*因此设置flag = 1
  2. 它看到:*/因此它会立即设置flag = 0
  3. 标志为0,因此执行“其他代码”
  4. 尝试更改if语句的顺序:

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

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

答案 1 :(得分:0)

你可以简单地在while循环中添加一个语句作为其中的第一个语句,如

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