解析css并创建类名和背景图像的键值数组

时间:2014-02-18 08:48:30

标签: php css regex

如果我有这样的CSS:

.featured .featured_1 {
    background-image: url("http://test.com/image.png");
    margin-top:20px;
}

然后这个PHP函数:

function makeArrayOfBackroundImages($css) {
    if (!preg_match_all('/\.([a-z\d_]+)\s*\{[^{}]*url\("?([^()]+)"?\)?/i', $css, $arr)) return array();
return array_combine($arr[1], $arr[2]);
}

创建一个类名称数组作为键,背景图像作为url。

feature => http://test.com/image.png

如何修改正则表达式和此函数,使其匹配两个类名。在这个例子中有两个类,但是类的数量是可变的,并且将是一个或多个,所以我需要匹配所有类名,具体取决于它们的数量。例如,我想创建一个这样的数组,因此两个类名都列为键,背景图像url作为两个键的值。忽略类中的任何其他css属性。

feature => http://test.com/image.png
featured_1 => http://test.com/image.png

1 个答案:

答案 0 :(得分:0)

  

如何修改正则表达式和此函数以使其匹配类名?

取决于。

总是会遇到一两个匹配的情况吗?会不会有三个,四个或五个?

如果它只是两个,你可以简单地重复第一个捕获组:

\.([a-z\d_]+)\s*(?:\.([a-z\d_]+)\s*)?\{[^{}]*url\("?([^()]+)"?\)?

http://regex101.com/r/fC7wU2