我尝试拆分存储在变量中的CSS代码。 但是,如果我有媒体查询或类似查询,我总是会遇到问题。
我不需要所有详细的规则,但是如果里面有括号,如何解决在括号处分割的问题?
@media xyz { div { width: 100px; } a {color: blue;}}
#other-div { width: 200px; color: red;}
结果,我只希望它成为零件:
1:@mediy xzy
3:#other-div
4宽度:200像素;颜色:红色;
如果我只有2个结果(整个块),则删除注释或拆分不会有问题,我可以自己解决。但是我不能用括号解决问题,因为它总是在下一个闭合括号处中断。
答案 0 :(得分:1)
要获得更好的概览,这是我的Sabberworm代码。
第一步:只需加载并保存:
$parser = new Sabberworm\CSS\Parser($cssoutput);
$oCss = $parser->parse();
$critical = $oCss->render(Sabberworm\CSS\OutputFormat::createCompact());
结果将是类似问题:
fa-arrow-right:before{content:"ï¡";}.
好的,所以我尝试删除以下规则:
$parser = new Sabberworm\CSS\Parser($cssoutput);
$oCss = $parser->parse();
foreach($oCss->getAllRuleSets() as $oRuleSet) {
$oRuleSet->removeRule('content');
}
$critical = $oCss->render(Sabberworm\CSS\OutputFormat::createCompact());
但这会删除更多内容,我无法特别找到原因和方式,但是css大约是之前的一半
我的主要部分(pq是phpQuery的函数)产生了错误(还要注释掉removerule部分)
$parser = new Sabberworm\CSS\Parser($cssoutput);
$oCss = $parser->parse();
foreach($oCss->getAllDeclarationBlocks() as $oBlock) {
foreach($oBlock->getSelectors() as $oSelector) {
echo "selektor: ".$oSelector->getSelector()."<br>";
if(!pq($oSelector->getSelector())->length)
{
$oBlock->removeSelector($oSelector);
}
}
if(count($oBlock->getSelectors()) === 0)
$oCss->remove($oBlock);
}
$critical = $oCss->render(Sabberworm\CSS\OutputFormat::createCompact());
错误:未捕获的Sabberworm \ CSS \ Parsing \ OutputException:尝试在/ var / www / vho中打印缺少选择符的声明块[行号:20] ...
答案 1 :(得分:0)
您可以执行以下操作:
<?php
$css = "@media xyz { div { width: 100px; } a {color: blue;}}
#other-div { width: 200px; color: red;}";
// split by line break
$lines = preg_split('/[\r\n]+/', $css);
$parts = [];
foreach ($lines as $line) {
// parse everything that's not "{" unit first "{" and the rest until last "}"
preg_match_all('/^([^{]+)\{(.+)\}/', $line, $matches);
// remove total result
array_shift($matches);
// remove second array level + trim
$matches = array_map(function($match) {
$match = array_shift($match);
return trim($match);
}, $matches);
// add to parts array
$parts = array_merge($parts, $matches);
}
var_dump($parts);
//array(4) {
// [0] =>
// string(10) "@media xyz"
// [1] =>
// string(38) "div { width: 100px; } a {color: blue;}"
// [2] =>
// string(10) "#other-div"
// [3] =>
// string(25) "width: 200px; color: red;"
//}