【问题标题】:Stripping Comments out of a file in PHP在 PHP 中从文件中删除注释
【发布时间】:2011-07-29 09:50:50
【问题描述】:

我必须解析包含不同类型 cmets 的各种文件。我一直在尝试找出一种简单的方法来去除这些 cmets,但到目前为止还没有什么好处。我有以 # 和 ; 开头的全行 cmets以及在相关数据之后启动的 cmets。最好的例子:

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

对剥离这些 cmets 有什么帮助吗?也许还有空行?

【问题讨论】:

    标签: php


    【解决方案1】:
    $t = ltrim(preg_replace('/\s*[#;].*$/m', '', $t));
    

    应该可以。删除所有 cmets,确保不要在 cmets 曾经所在的位置留下任何空白行。还会在 cmets 之前杀死空格,但如果您不希望这样做,可以更改(\s\n)。

    编辑:刚刚看到关于删除空行的注释。以下内容应同时删除 cmets 和空行:

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

    未经测试,但第二个条件应捕获空白(仅空白)行。 ltrim 仍然需要删除前导注释可能导致的任何空白。可能可以将其作为正则表达式的一部分来捕获,但我认为使用 ltrim 时它不那么复杂。

    再次编辑:实际上上面的内容会删除每行上的所有前导空格。如果这是一个问题,您可以通过以下方式解决它:

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

    【讨论】:

    • +1 有效并且比我的要好。可以将 /x 用于一些内联文档,因此在三个月内阅读它时您仍然可以理解它。
    • @Gordon,这是个好建议,但我不会在三个月内使用此代码,读者自己添加 cmets 是一个很好的练习。 ;)(说实话,我只是懒惰。)
    • 感谢您的帮助。我在我的代码中使用了最后一个代码片段。再次感谢您。
    【解决方案2】:

    这应该可以工作 (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
    );
    

    以上内容将在全行 cmets 所在的位置留下空白行。如果您也想替换它们,请在第一个 [;#] 之前添加\s(如下面的@konforce 所示)。

    【讨论】:

      猜你喜欢
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      • 2018-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      相关资源
      最近更新 更多