我使用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或更好?这将是很好,没有留下一个空白的差距。

有帮助吗?

解决方案

此应通过正则表达式处理:

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函数( “@导入”, '',$ STR);

这可能是更容易找到使用的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);

应该做的工作......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top