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