2014-02-18 38 views
0

如果說我的CSS是這樣的:解析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 

如何修改正則表達式和此函數,使它與兩個類名匹配。在這個例子中有兩個類,但是類的數量是可變的,並且會是一個或多個類,所以我需要根據多少個類來匹配所有的類名。例如,我想創建一個這樣的數組,所以這兩個類名都被列爲key,背景圖像url作爲兩個鍵的值。忽略類中的任何其他css屬性。

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

回答

0

如何我可以修改正則表達式,這功能,所以它同時匹配類的名字呢?

這取決於。

它總是會遇到一個或兩個匹配的情況嗎?會不會有三,四或五?

如果只有兩個,你可以簡單地重複第一個捕獲組:

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

http://regex101.com/r/fC7wU2

+0

感謝這個,如果我不知道有多少班將首先追加。它可能是一個或多個。有沒有辦法做到這一點? –