Reputation: 3608
I want to write the regular expression in php matching condition below:
/*
Remove this comment line 1
Remove this comment line 2
*/
.class1
{
background:#CCC url(images/bg.png);
}
.class2
{
color: #FFF;
background:#666 url(images/bg.png); /* DON'T remove this comment */
}
/* Remove this comment */
.class3
{
margin:2px;
color:#999;
background:#FFF; /* DON'T Remove this comment */
}
...etc
...etc
Please any one give me a regular expression in php. Thanks.
Upvotes: 0
Views: 1157
Reputation: 46
Not working for multiline comments like
/*
* Lorem ipsum
*/
This one do the job
$regex = "!/\*[^*]*\*+([^/][^*]*\*+)*/!";
$newstr = preg_replace($regex,"",$str);
echo $newstr;
Found here : http://www.catswhocode.com/blog/3-ways-to-compress-css-files-using-php
Upvotes: 1
Reputation: 2277
Codepad: http://codepad.org/aMvQuJSZ
Support multiline:
/* Remove this comment
multi-lane style 1*/
/* Remove this comment
multi-lane style 2
*/
/* Remove this comment */
Regex Explanation:
^ Start of line
\s* only contains whitespace
\/\* continue with /*
[^(\*\/)]* unlimited number of character except */ includes newline
\*\/ continue with */
m pattern modifier (makes ^ start of line, $ end of line
Example php code:
$regex = "/^\s*\/\*[^(\*\/)]*\*\//m";
$newstr = preg_replace($regex,"",$str);
echo $newstr;
Upvotes: 0
Reputation: 9907
If the rule is that you want to remove all comments where there is no other code on the line then something like this should work:
/^(\s*\/\*.*?\*\/\s*)$/m
The 'm' option makes ^ and $ match the beginning and end of a line. Do you expect the comments to run for more than one line?
EDIT:
I'm pretty sure this fits the bill:
/(^|\n)\s*\/\*.*?\*\/\s*/s
Do you understand what it's doing?
Upvotes: 1