Replacing // comments with /* comments */ in PHP

我们两清 提交于 2020-01-14 05:12:07

问题


I'm creating a CSS generator in PHP which uses CSSX (yep, they are my idea) files (with a special syntax). One feature is 'short comments':

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

Now I want to replace this comment with a /* ... */ comment, so the output is like this:

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

How can I do this? Thanks,

P.S. The complete CSSX file is read into one string variable.
P.P.S This q is answered. To fix the url('//server/etc.cssx') problem, use this:

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

回答1:


A regexp should do the trick:

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

This won't take into account quoted strings - if you're using something crazy like

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

then it's going to think that's a comment. If this is a problem then you're better off writing a proper parser.




回答2:


<? preg_replace('#//(.*)$#', '/*$1*/', $cssx); ?>



回答3:


Greg's expression has two problems: first, 'm' and '$' are superfluous, second it doesn't handle carriage returns correctly (in case your system uses them).

A better expression appears to be

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


来源:https://stackoverflow.com/questions/1764311/replacing-comments-with-comments-in-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!