2012-07-18 95 views
1

我有以下模式:模式匹配的CSS規則

[\{\}].*[\{\}] 

用下面的測試字符串(如果需要的話可以提供更多):

}.prop{hello:ars;} //shouldn't match 
}#prop{} //should match 
}.prop #prop {} //should match 

該模式的目的是找到空的CSS規則集。有人可以建議我如何排除與第二組括號之間的字符匹配嗎?隨着我接近解決方案,我將更新模式。

編輯: 上http://gskinner.com/RegExr/ 這種模式:[\}].*[\{]{1}[/}]{1} 似乎有希望的結果,雖然轉移到PHP的原因,我不明白,當它被打破。

編輯: 如果這應該是一個單獨的問題,首先道歉。 在PHP中使用的第一編輯模式:

$pattern = "/[\}].*[\{]{1}[/}]{1}/"; 
    preg_match_all ($pattern, $new_css, $p); 
    print_r($p); 

當$ new_css是包含空的規則集上傳的CSS文件的內容的字符串,$ P是從來沒有填充。但我知道這種模式是可以的。任何人都可以看到問題是什麼?

編輯:最終解決方案

//take out other unwanted characters 
     $pattern = "/\}([\.#\w]\w+\s*)+{}/"; 
     //do it twice to beat any deformation 
     $new_css = preg_replace ($pattern, '}', $new_css); 
     $new_css = preg_replace ($pattern, '}', $new_css); 
+0

爲什麼'\ {\ S * \}'不行? – amon 2012-07-18 16:07:01

+0

我想要得到的類/ ID等以及括號 – 2012-07-18 16:14:23

+0

去年我做了一些類似的PHP與.css文件,刪除所有評論,標記文本和檢測到的所有顏色定義。所以我也很好奇,如果有人會幫助你找到一些解決方案。 – Stano 2012-07-18 16:30:25

回答

0

嘗試模式:'/}([\.#]\w+\s*)+{}/'

$new_css = "{}.prop{hello:ars;} 
{}#prop{} //should match 
}.prop #prop {} //should match 
}.prop { aslkdfj} 
}.prop { } 
"; 

$pattern = '/}([\.#]\w+\s*)+{}/'; 
preg_match_all ($pattern, $new_css, $p); 
print_r($p); 

此輸出:

Array 
    (
    [0] => Array 
    (
     [0] => }#prop{} 
     [1] => }.prop #prop {} 
    ) 

    [1] => Array 
    (
     [0] => #prop 
     [1] => #prop 
    ) 
) 
+0

抱歉,延遲響應。該模式稍有限制,僅捕獲第一個類/ id名稱。它在更復雜的選擇器上失敗。我會看看我是否可以調整它。 – 2012-07-19 08:07:34

+0

上述修正,它不會捕獲本地元素,如body,ul,li ect。 – 2012-07-19 08:20:49

1

嘗試使用單引號括起來的正則表達式,或者加倍\字符。 PHP在雙引號字符串中處理\的方式是\{變爲{,打破了正則表達式。