所以我正在为样式表构建解析器。在我的CSS文件中,我将解析类似这样的内容:
body {
background-image: &gradient(#1073b8, &saturate(#1073b8, -20), 40);
}
结果将是这样的值:
body {
background-image: url(/cache/graident12345.png);
}
我的&gradient()
函数的输出是我捕获并执行的。但是&gradient()
的一个论点是&saturate()
的结果,所以它是分层的,我需要preg_replace()
来处理它们从内到外,但我该怎么做呢?因此,首先捕获并解析&saturate()
,返回一个颜色HEX值,该值在解析&gradient()
时将在字符串中。我当前的查找代码如下所示:
if (preg_match("/\&(gradient|saturate)\((.*?)\)/", $value, $m)){
$arg = explode(", ", $m[2]); # splits argument to the function
if ($m[1] == "saturate"){
$value = str_replace($m[0], saturate($arg[1], $arg[2]);
}
}
我会添加功能,因为我可以使用它们。或者,也可以在正则表达式中捕获函数名称。
我能说清楚吗?有任何想法吗? :)
答案 0 :(得分:0)
您可以使用regex结合递归函数进行一些有趣的解析。我已经嘲笑了一些适用于你的场景的东西,可以根据你的需要进行调整。
如果您需要对正在发生的事情做任何解释,请告诉我,但它基本上通过递归调用函数来创建递归结构,该函数为模式&functionname([args...])
的正则表达式。