繁体   English   中英

正则表达式-从内到外的替换

[英]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]);
   }
}

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

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

您可以结合使用正则表达式和递归函数来进行一些有趣的解析。 我已经模拟了一些适合您的情况的东西,可以随时根据您的需要进行调整。

http://ideone.com/66tV0

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM