【问题标题】:Regex matching for counting CSS selectors用于计数 CSS 选择器的正则表达式匹配
【发布时间】:2017-03-10 07:57:09
【问题描述】:

我正在尝试(但失败)指定一个可以与 PHP 的 preg_match_all() 一起使用的单个正则表达式:

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

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

({)*(,)*

【问题讨论】:

  • 3 个匹配项应该是 .foo、.bar 和 .bot,对吧?不是 bar、bip 和 bop?
  • @sp00m - 文本不重要。我正在尝试计算 CSS 选择器的总数,它可以(一种方式)确定为“左大括号的总数”加上“未被大括号括起来的逗号总数”。当然还有其他几种可行的方法。

标签: php regex


【解决方案1】:

试试这个:

\{.+?\}|,

意思:

\{   # 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

【讨论】:

  • 太棒了!只需要忽略换行符:preg_match_all('/\{.+?\}|,/s',$contents,$matched);
【解决方案2】:

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

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

它会计算 css 中的任何 ,,所以像 rgba(0, 0, 0, 0.5) 这样使用 , 的规则也会被计算在内。如果您了解这些限制,这将很有用。接受的解决方案不适用于@media

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    相关资源
    最近更新 更多