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