@import和\ n之间的替换文本
-
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; }
如果上面的风格是一个字符串内,我如何最好的方式代替@进口线用了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);
应该做的工作......
不隶属于 StackOverflow