我必须解析包含不同类型注释的各种文件。我一直在试图找出一个简单的方法来删除这些评论,但迄今为止没有什么好的。我有全线评论,以#和开头;以及在相关数据之后开始的评论。最好的例子:从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