如果我有这样的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

最佳答案

如何修改正则表达式和此函数,使其与两个类名都匹配?


这取决于。

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

如果只有两个,则只需重复第一个捕获组:

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


http://regex101.com/r/fC7wU2

10-05 21:01
查看更多