有必要在css文件中执行搜索和替换字符串。并且只找到了标题图片。
除了
之外,搜索已完成/:(\s*)url\(((.(?!.*https:|.*http:|.*base64|.*data:image))*)\)/ig
并替换
:$1url(\'../dist/img/vendor/$2\')
在这种情况下,我以类似的方式替换路径。我得到了这个结果
background-image: url('../dist/img/vendor/"../images/preloader.gif"');
需要字符串
background-image: url("../images/preloader.gif");
获取
background-image: url('../dist/img/vendor/preloader.gif');
答案 0 :(得分:0)
查找
/(url\(\s*[\"\'])(?:[^\"\']+\/)?([^\/\"\']+[\"\']\s*\))/ig
替换
$1../dist/img/vendor/$2
答案 1 :(得分:0)
使用css解析器是一种更好的方法,如果你想要避免引用问题(单引号,双引号,没有引号)。
另外,background-image
CSS属性不是唯一可以包含图像文件路径的属性,因为background
属性可以编译来自其他background-
的所有数据。 1}}属性。
sabberworm PHP CSS Parser自动包含双引号之间路径的示例:
require __DIR__ . '/vendor/autoload.php';
define('NEW_PATH', '../dist/img/vendor/');
$oCssParser = new Sabberworm\CSS\Parser($css);
$oCssDocument = $oCssParser->parse();
$properties = ['background-image', 'background'];
foreach($oCssDocument->getAllRuleSets() as $oRuleSet) {
foreach($properties as $property) {
$oCssRules = $oRuleSet->getRules($property);
foreach ($oCssRules as $oCssRule) {
$value = $oCssRule->getValue()->__toString();
if (!preg_match('~https?:|base64|data:image~S', $value)) {
$value = preg_replace('~url\("\K(?:[^"/]*/)*~', NEW_PATH, $value);
$oCssRule->setValue($value);
}
}
}
}
echo $oCssDocument->render(Sabberworm\CSS\OutputFormat::createPretty());