【问题标题】:Replacing // comments with /* comments */ in PHP在 PHP 中用 /* 注释 */ 替换 // 注释
【发布时间】:2010-12-18 08:53:14
【问题描述】:

我正在用 PHP 创建一个 CSS 生成器,它使用 CSSX(是的,它们是我的想法)文件(具有特殊语法)。一个功能是“短 cmets”:

body
{
    font-family: Georgia; //I really like this font!
}

现在我想用 /* ... */ 评论替换这条评论,所以输出是这样的:

body
{
    font-family: Georgia; /*I really like this font!*/
}

我该怎么做?谢谢,

附:将完整的 CSSX 文件读入一个字符串变量。
P.P.S 这个 q 已回答。要修复 url('//server/etc.cssx') 问题,请使用:

$file =  preg_replace('~[^"\'\(]//([^\r\n]*)[^"\'\)]~', '/*$1*/', $file);

【问题讨论】:

    标签: php regex code-generation


    【解决方案1】:

    正则表达式应该可以解决问题:

    $str = preg_replace('_//(.*)$_m', '/*$1*/', $str);
    

    这不会考虑带引号的字符串 - 如果你正在使用类似的东西

    background-image: url('//my-server/my.jpg');
    

    那么它会认为这是一条评论。 如果这是一个问题,那么您最好编写一个适当的解析器。

    【讨论】:

    • @Koning:他们只是指定正则表达式的分隔符。您可以使用许多字符,preg_replace 将假定第一个是您要使用的分隔符。 “标准”分隔符是 /,但您必须在模式中转义 /
    • 好的,我明白了。我以为只有 / 可用作分隔符。
    • 我解决了 url() 的问题。只需使用这个: $file = preg_replace('~[^"\'(]//([^\r\n]*)[^"\')]~', '/*$1*/' , $file);
    【解决方案2】:
    <? preg_replace('#//(.*)$#', '/*$1*/', $cssx); ?>
    

    【讨论】:

    • @Koning:我只是无法与 Greg 的闪电手指竞争...... tnx
    【解决方案3】:

    Greg 的表达式有两个问题:首先,'m' 和 '$' 是多余的,其次它不能正确处理回车(以防你的系统使用它们)。

    更好的表达方式似乎是

     preg_replace('~//([^\r\n]*)~', '/*$1*/', $str);
    

    【讨论】:

    • 嗯,它可以在 OSX、Linux 和 Windows 上运行非常重要,因为我将发布源代码。
    猜你喜欢
    • 2014-10-08
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 2019-02-23
    • 2012-07-28
    • 2010-10-07
    • 1970-01-01
    • 2012-08-13
    相关资源
    最近更新 更多