Замените текст между @import и
-
19-09-2019 - |
Вопрос
Я использую 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; }
Если приведенный выше стиль находится внутри строки, как мне наилучшим образом заменить @import-lines на preg_replace или лучше?Было бы неплохо не оставлять пробелов.
Решение
Это должно обрабатывать это с помощью регулярного выражения:
preg_replace('/\s*@import.*;\s*/iU', '', $text);
Другие советы
Вы могли бы легко выполнить итерацию по каждой строке, а затем определить, начинается ли она с @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;
}
}
str_replace("@import", ", $str) str_replace("@импорт", ", $str);
Возможно, было бы проще найти @imports с помощью preg_match, а затем заменить их с помощью 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);
Должен выполнить эту работу...