PHP:替换正则表达式中的CSS属性
我试图用正则表达式解析CSS并替换PHP中的特定值 目前,我已经能够使用找到的“CSS解析器”类解析CSS文件 我已经能够创建简单的正则表达式,因为我不太高级,这并不能解释像间距这样的怪癖 范例PHP:替换正则表达式中的CSS属性,php,regex,replace,Php,Regex,Replace,我试图用正则表达式解析CSS并替换PHP中的特定值 目前,我已经能够使用找到的“CSS解析器”类解析CSS文件 我已经能够创建简单的正则表达式,因为我不太高级,这并不能解释像间距这样的怪癖 范例 .marked p 不会被解析,所以我不得不废弃它 是否有一个可用的正则表达式可以与preg_replace一起使用以实现此目的?此模式会查找所有选择器并将规则转换为键值数组。它应该适用于格式良好的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);