模式匹配css规则


Pattern matching css rules

我有以下模式:

['{'}].*['{'}]

使用以下测试字符串(如果需要,可以提供更多):

}.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);

尝试在正则表达式周围使用单引号,或将'字符加倍。PHP在双引号字符串中处理'的方式是'{变成{,破坏正则表达式。

尝试模式:'/}(['.#]'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
    )
  )