在CSS摘录中使用PHP向所有选择器添加前缀?

JCO*_*611 2 css php parsing

好的,可以说我有一个$css包含一些CSS代码的变量。我想做的是在每个选择器的前面添加一个特定的文本。因此,例如,以下代码:

#hello, .class{width:1px;height:1px;background-color:#AAA;}
div{font-size:1px}
input, a, span{padding:4px}
Run Code Online (Sandbox Code Playgroud)

将被转换为:

#someId #hello, #someId .class{ ... }
#someId div{ ... }
#someId input, #someId a, #someId span{ ... }
Run Code Online (Sandbox Code Playgroud)

我一直在尝试使用几个explode()s。但是,我无法有效完成任务。有什么想法吗?

谢谢!JCOC611

Jan*_*enk 5

基于乔恩的建议,我编写了以下代码:

<?php

$prefix = '#someId';
$css = '#hello, .class{width:1px;height:1px;background-color:#AAA;}
div{font-size:1px}
input, a, span{padding:4px}';

$parts = explode('}', $css);
foreach ($parts as &$part) {
    if (empty($part)) {
        continue;
    }

    $subParts = explode(',', $part);
    foreach ($subParts as &$subPart) {
        $subPart = $prefix . ' ' . trim($subPart);
    }

    $part = implode(', ', $subParts);
}

$prefixedCss = implode("}\n", $parts);

echo $prefixedCss;
Run Code Online (Sandbox Code Playgroud)

要查看其是否有效,请参见http://codepad.org/bqRd83gu