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

2019-06-06 07:06发布

问题:

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);