我将多个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
实例?
你最好使用这个正则表达式,
@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
多行修改器,因为我们不在我们的模式中使用开始/结束锚点。
您正在使用贪婪的*
运算符,它尽可能地匹配。
尝试使用.*?
(懒惰运算符)而不是.*
。