2012-09-24 79 views
2

我試圖(和失敗)指定一個正則表達式,我可以用PHP的preg_match_all()使用以下正則表達式匹配:計數CSS選擇

.foo { bar } 
.baz, .bot { bip, bop } 

我需要計算所有{只有,這不在{}之間。鑑於上面的例子,我應該有三場比賽。我的困難(無知)是我不明白如何指定「花括號之間不匹配逗號」部分。我現在的正則表達式所有逗號開放大括號匹配:

({)*(,)* 
+0

3場比賽應該是.foo,.bar和.bot,對吧?不是吧,bip和bop? – sp00m

+0

@ sp00m - 文字不重要。我試圖計算CSS選擇器的總數,它可以被確定(單向)爲「開啓花括號的總數」加上「不用花括號括起來的逗號的總數」。當然還有其他一些方法可行。 – benmarks

回答

2

試試這個:

\{.+?\}|, 

含義:

\{ # If you can match a brace 
.+? # then also grab the minimum amount of other charactors 
\} # until you reach the closing brace 
|, # or if there was no brace then just match a comma 
+1

太棒了!只需要忽略換行符:'preg_match_all('/ \ {。+?\} |,/ s',$ contents,$ matched);' – benmarks

1

如果你想接近,但沒有確切的統計,這是一個快速骯髒的方式去做

$selector_count = substr_count($css, ',') + substr_count($css, '{') - substr_count($css, '@media'); 

它會計算css中的任何,,因此使用,的規則(如rgba(0, 0, 0, 0.5))也會計算在內。如果您瞭解這些限制,這會很有用。接受的解決方案不適用於@media