2011-04-04 37 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