PHP:替换正则表达式中的CSS属性

PHP:替换正则表达式中的CSS属性,php,regex,replace,Php,Regex,Replace,我试图用正则表达式解析CSS并替换PHP中的特定值 目前,我已经能够使用找到的“CSS解析器”类解析CSS文件 我已经能够创建简单的正则表达式,因为我不太高级,这并不能解释像间距这样的怪癖 范例 .marked p 不会被解析,所以我不得不废弃它 是否有一个可用的正则表达式可以与preg_replace一起使用以实现此目的?此模式会查找所有选择器并将规则转换为键值数组。它应该适用于格式良好的CSS,否则可能需要进行一些调整 这个想法是,在CSS中,在规则的方括号之间除了选择器之外什么都

我试图用正则表达式解析CSS并替换PHP中的特定值

目前,我已经能够使用找到的“CSS解析器”类解析CSS文件

我已经能够创建简单的正则表达式,因为我不太高级,这并不能解释像间距这样的怪癖

范例

.marked     p
不会被解析,所以我不得不废弃它


是否有一个可用的正则表达式可以与preg_replace一起使用以实现此目的?

此模式会查找所有选择器并将规则转换为键值数组。它应该适用于格式良好的CSS,否则可能需要进行一些调整

这个想法是,在CSS中,在规则的方括号之间除了选择器之外什么都没有。它搜索字符串,直到它到达起始括号,并将其解释为选择器。因此,它基本上搜索“not{”,当它找到一个
{
时,它知道它找到了一个选择器。因此,它可能无法正确处理
@import
s,但这也可以解释

这段代码来自我的,我的很多想法都来自我的


你能告诉我们你到目前为止的模式吗?具体化。你的问题是CSS属性,但你显示的是一个选择器。CSS也可以很容易地与正则表达式匹配,但如果需要保留剩余的,替换可能更复杂。对于多个空格,请使用
\s+
function callback($match)
{
    // Normalize whitespace from selector
    $selector = trim(preg_replace('/\s\s+/', ' ', $match[1]));

    // Turn the rules into key-value array
    $rules_str = str_replace(array('{', '}'), '', trim(preg_replace('/\s\s+/', ' ', $match[2])));
    $rules_pieces = explode(';', $rules_str);
    $rules = array();

    foreach ( $rules_pieces as $rule )
    {
        // No key-value pair?
        if ( ! strstr($rule, ':') ) continue;

        list($key, $value) = explode(':', trim($rule));
        $rules[$key] = trim($value);
    }

    // Do some stuff
    echo $selector . PHP_EOL;
}

$css = "
    body {
            font: foo; size: 1px; 
    }

    #foo .bar div {
            foo: bar;
            foooo: bar;
    }  

    #foo    .bar div { foo: bar; }
";

preg_replace_callback('/([^{;]+)(\{[^}]+\})/', 'callback', $css);