用于计数CSS选择器的正则表达式匹配

时间:2012-09-24 14:24:45

标签: php regex

我正在尝试(并且失败)指定一个正则表达式,我可以使用PHP的preg_match_all()进行以下操作:

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

我需要计算所有不在{}之间的{,。鉴于上面的示例,我应该有三个匹配。我的困难(无知)是我不明白如何指定“花括号之间的逗号不匹配”部分。我当前的正则表达式匹配所有逗号并打开花括号:

({)*(,)*

2 个答案:

答案 0 :(得分: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 :(得分:1)

如果你想要一个接近但不准确的计数,这是一个快速而又脏的方法

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

它会计算css中的所有,,因此使用rgba(0, 0, 0, 0.5)的{​​{1}}等规则也会计算在内。如果您了解这些限制,这将非常有用。已接受的解决方案不适用于,