2011-04-04 54 views
2

我必須解析包含不同類型註釋的各種文件。我一直在試圖找出一個簡單的方法來刪除這些評論,但迄今爲止沒有什麼好的。我有全線評論,以#和開頭;以及在相關數據之後開始的評論。最好的例子:從PHP中的文件中剝離註釋

data 
data 
#comment 
;comment 
data ;comment 
data #comment 

任何幫助剝離這些評論?也許還有空白的行?

回答

4

這應該工作(live demo):

echo preg_replace(
    '/ 
     [;#] # remove strings starting with ; or # 
     .*  # and everything following that 
     $  # until it ends in a newline 
    /mx',  // make it span multilines 
    '', 
    $data 
); 

上面會留下空白行,其中全線意見已。如果您想要替換這些,請在第一個[;#]之前加上\s(如下面的@konforce所示)。

3
$t = ltrim(preg_replace('/\s*[#;].*$/m', '', $t)); 

應該工作。刪除所有評論,確保不留下評論過去的空白行。也可以在評論前殺死空白,但如果您不想要,可以更改(\s\n)。

編輯:剛纔看到關於刪除空白行的說明。以下應刪除註釋和空白行:

$t = ltrim(preg_replace('/(\s*[#;].*$)|(^\s*)/m', '', $t)); 

未測試,但第二個條件應該爲空(只有空格)行。 ltrim仍然需要刪除主要評論可能導致的任何空白。可能可以將其作爲正則表達式的一部分,但我認爲它不太複雜,因爲它是ltrim

再次編輯:實際上,上述操作會刪除每行上的所有前導空白。如果這是一個問題,你可以修復它:

$t = ltrim(preg_replace('/(\s*[#;].*$)|(^\s*\n)/m', '', $t)); 
+0

+1作品,比我的好。可以使用/ x雖然對於一些內聯文檔,所以在三個月內閱讀時仍然能夠理解它。 – Gordon 2011-04-04 19:20:42

+1

@戈登,這是很好的建議,但我不會在三個月內使用這段代碼,這對讀者來說是一個很好的練習,可以自己添加評論。 ;)(說實話,我只是懶惰。) – Matthew 2011-04-04 19:39:22

+0

感謝您的幫助。我在代碼中使用最後一個代碼snippit。再次感謝你。 – psion 2011-04-05 06:58:12