[英]Regular expression - replacement inner to outer
因此,我正在为样式表构建一个解析器。 在我的CSS文件中,我将解析如下内容:
body {
background-image: &gradient(#1073b8, &saturate(#1073b8, -20), 40);
}
结果将是如下所示的值:
body {
background-image: url(/cache/graident12345.png);
}
这是我捕获并执行的&gradient()
函数的输出。 但是&gradient()
的参数之一是&saturate()
的结果,所以它是分层的,我需要preg_replace()
来处理它们的内部到外部,但是我该怎么做? 因此,首先捕获并解析&saturate()
,返回一个彩色十六进制值,该值将在解析&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]);
}
}
并且我将在使它们可用时添加功能。 或者,在正则表达式中也捕获函数名称。
我能说清楚吗? 有任何想法吗? :)
您可以结合使用正则表达式和递归函数来进行一些有趣的解析。 我已经模拟了一些适合您的情况的东西,可以随时根据您的需要进行调整。
如果您需要对发生的事情进行任何解释,请告诉我,但这基本上是通过递归调用函数的函数来创建递归结构的,该函数正则表达式为&functionname([args...])
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.