我已将多个CSS文件合并并缩小为一个字符串,如下所示:
@import "path/to/file1";.my-class{font-size:24px;}@import "path/to/file2";
但是现在我想“关闭”导入。因此,我想删除@import "something";
的所有实例并获取此信息:
.my-class{font-size:4px;}
我目前正在使用此
:echo preg_replace("(@import \".*\";)", "", $minified_css);
但这将替换整个字符串。即,它不会在";
的第一个实例处停止并重新启动。
如何获取正则表达式来替换单个@import
实例?
答案 0 :(得分:4)
您最好使用此正则表达式,
@import\s+"[^"]+";
并使用空字符串将其删除
此外,在正则表达式(@import \".*\";)
中避免使用(
)
,因为在用空字符串替换正则表达式时,您不需要无用地分组。另外,请避免使用.*
,否则它将与所有可能的内容贪婪地匹配,并且可能会给您带来意想不到的结果。
尝试此PHP代码段,
$minified_css = '@import "path/to/file1";.my-class{font-size:24px;}@import "path/to/file2";';
echo preg_replace('/@import\s+\"[^"]+\";/', '', $minified_css);
打印
.my-class{font-size:24px;}
我认为您不需要在g
中使用全局preg_replace
修饰符,因为默认情况下会发生这种情况,您可以通过传递第三个参数来控制替换编号。另外,您无需使用m
多行修饰符,因为我们无需在模式中使用开始/结束锚点。
答案 1 :(得分:1)
您正在使用贪婪的*
运算符,该运算符试图尽可能匹配。
尝试使用.*?
(惰性运算符)代替.*
。