我必須解析包含不同類型註釋的各種文件。我一直在試圖找出一個簡單的方法來刪除這些評論,但迄今爲止沒有什麼好的。我有全線評論,以#和開頭;以及在相關數據之後開始的評論。最好的例子:從PHP中的文件中剝離註釋
data
data
#comment
;comment
data ;comment
data #comment
任何幫助剝離這些評論?也許還有空白的行?
我必須解析包含不同類型註釋的各種文件。我一直在試圖找出一個簡單的方法來刪除這些評論,但迄今爲止沒有什麼好的。我有全線評論,以#和開頭;以及在相關數據之後開始的評論。最好的例子:從PHP中的文件中剝離註釋
data
data
#comment
;comment
data ;comment
data #comment
任何幫助剝離這些評論?也許還有空白的行?
這應該工作(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所示)。
$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));
+1作品,比我的好。可以使用/ x雖然對於一些內聯文檔,所以在三個月內閱讀時仍然能夠理解它。 – Gordon 2011-04-04 19:20:42
@戈登,這是很好的建議,但我不會在三個月內使用這段代碼,這對讀者來說是一個很好的練習,可以自己添加評論。 ;)(說實話,我只是懶惰。) – Matthew 2011-04-04 19:39:22
感謝您的幫助。我在代碼中使用最後一個代碼snippit。再次感謝你。 – psion 2011-04-05 06:58:12