Заменить текст между @import и \ n - PullRequest
0 голосов
/ 06 января 2010

Я использую 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 или лучше? Было бы неплохо не оставлять пробела.

Ответы [ 4 ]

3 голосов
/ 06 января 2010

Это должно обработать это через регулярное выражение:

preg_replace('/\s*@import.*;\s*/iU', '', $text);
1 голос
/ 06 января 2010

Вы можете легко перебрать каждую строку, а затем определить, начинается ли она с @ 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;
    }
}
0 голосов
/ 06 января 2010

Может быть проще найти @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);

Должен делать работу ...

0 голосов
/ 06 января 2010

str_replace ("@ import", '', $ str);

...