2012-07-18 96 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在双引号字符串中处理\的方式是\{变为{,打破了正则表达式。