2013-05-12 71 views
0

有以下Perl碼,即刪除的C多行註釋:由於我的Perl和正則表達式很新正則表達式刪除C風格的多行註釋

sub StripMultilineComments { 
    my $string=shift(); 
    $string =~ s#/\*.*?\*/##sg; #strip multiline C comments 
    return $string; 
} 

,我不知道完全明白它是如何工作的。

+0

你從哪裏找到這段代碼?你能否提出反對它的錯誤報告? – innaM 2013-05-12 19:59:19

回答

4

那麼,說它的作品有點誇大其詞。例如,

char* s1 = "/*"; 
char* s2 = "*/"; 

變得

char* s1 = ""; 

// /* 
i = 5; 
// */ 

變得

// 

這就是說,

  1. 第一行聲明sub並開始定義它。
  2. 第二行grabs第一個參數並將其放入$string
  3. 第三行使用substitution operator刪除$string中的註釋。
  4. 第四行返回轉換後的字符串。

由替換操作中所用的匹配pattern

  1. /
  2. A *
  3. 任意數量的字符(.*?與/ s)。
  4. A *
  5. A /

第三原子的最小字符數目相匹配它可以(在規定的位置),由於非貪婪改性劑(?)。

+0

這裏的'#'是什麼意思? – Alex 2013-05-12 15:27:55

+1

它被用來代替/; s#foo#fee#g與s/foo/fee/g相同 – SqlACID 2013-05-12 15:39:00

+1

這是正則表達式和替換字面值的分隔符###'''',///','s !!!',' s {} {}'等都意味着同樣的事情。如果已經使用'/',那麼模式中的'/'必須被轉義。 – ikegami 2013-05-12 15:40:02