2014-01-08 61 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

這也適用。謝謝 –