我使用PHP。
我正在努力将所有CSS文件自动组合成一个。我自动加载CSS文件,然后将它们保存到更大的文件中,以便上传。
在我的本地安装中,我有一些需要删除的@import行。
看起来像这样:
@import url('css/reset.css');
@import url('css/grid.css');
@import url('css/default.css');
@import url('css/header.css');
@import url('css/main.css');
@import url('css/sidebar.css');
@import url('css/footer.css');
body { font: normal 0.75em/1.5em Verdana; color: #333; }
如果上面的样式在字符串中,我如何用preg_replace或更好的方法替换@ import-lines?不要留下空白区间会很好。
答案 0 :(得分:3)
这应该通过正则表达式来处理:
preg_replace('/\s*@import.*;\s*/iU', '', $text);
答案 1 :(得分:1)
您可以轻松地遍历每一行,然后确定它是否以@import开头。
$handle = @fopen('/path/to/file.css', 'r');
if ($handle) {
while (!feof($handle)) {
$line = fgets($handle, 4096);
if (strpos($line, '@import') !== false) {
// @import found, skip over line
continue;
}
echo $line;
}
fclose($handle);
}
或者,如果您想将文件预先存储在数组中:
$lines = file('/path/to/file.css');
foreach ($lines as $num => $line) {
if (strpos($line, '@import') !== false) {
// @import found, skip over line
continue;
}
}
答案 2 :(得分:0)
str_replace(“@ import”,'',$ str);
答案 3 :(得分:0)
使用preg_match找到@imports可能更容易,然后使用str_replace替换它们
$str = "<<css data>>";
while (preg_match("/@import\s+url\('([^']+)'\);\s+/", $str, $matches)) {
$url = $matches[1];
$text = file_get_contents($url); // or some other way of reading that url
$str = str_replace($matches[0], $text, $str);
}
只剥离所有@import行:
preg_replace("/@import[^;]+;\s+/g", "", $str);
应该做的工作......