2

所以我正在为样式表构建一个解析器。在我的 CSS 文件中,我将解析如下内容:

body {
   background-image: &gradient(#1073b8, &saturate(#1073b8, -20), 40);
}

结果将是这样的值:

body {
   background-image: url(/cache/graident12345.png);
}

这是我的&gradient()函数的输出,我捕获并执行。但是其中一个论点&gradient()是 的结果&saturate(),所以它是分层的,我需要preg_replace()从内到外处理它们,但我该怎么做呢?所以首先 catch 和 parse &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]);
   }
}

我将添加功能,因为我使它们可用。或者,在正则表达式中也捕获函数名称。

我说清楚了吗?有任何想法吗?:)

4

1 回答 1

0

您可以使用正则表达式和递归函数进行一些有趣的解析。我已经模拟了一些适用于您的场景的东西,请随时根据您的需要对其进行调整。

http://ideone.com/66tV0

如果您需要对正在发生的事情进行任何解释,请告诉我,但它基本上是通过对一个正则表达式模式的函数的递归调用来创建一个递归结构&functionname([args...])

于 2012-09-18T17:59:35.550 回答