我有这些CSS代码。
.class-1,
.class-2,
class-3 {
}
.class-4,
class-5 {
}
.class-6,
class-7 {}
.not-empty-1 {font-size: 12;}
.not-empty-2 {
font-size: 12;
}
.not-empty-3 {
font-size: 12;
}
我需要删除没有任何属性的CSS类。
我已经尝试过
.+\s{(\n.*|)}
https://regex101.com/r/8xFUDl/2
,但是它不会删除如在实时示例中看到的先前的类,例如.class-1, .class-2,
。
任何解决方案都值得赞赏。
答案 0 :(得分:1)
从最终模式的注释和字幕到@ anubhava,对于示例数据,您可以使用:
^(?:[^{}\r\n]*\R)*+[^{}]+{\s*}\s*
说明
^
字符串的开头(?:
非捕获组
[^{}\r\n]*\R
匹配0+次除{
}
或换行符和Unicode换行符序列以外的任何字符)*+
关闭组并使用possessive quantifier [^{}]+
匹配除{
或}
以外的任意其他字符1倍以上{\s*}
将{
和}
匹配,中间留有空格(请注意\s
也与换行符匹配)\s*
匹配可能的尾随空白字符答案 1 :(得分:0)
自从您标记了PHP
之后,我们可以进行一些字符串处理以使正则表达式更简单一些,我们可以只匹配单个.some_class{some_props}
样式,而忽略所有不遵循此属性的其他样式
我们可以忽略所有空格,换行,而只收集字符串中的文本,并在每个样式之间使用空格作为分隔符。现在,我们可以展开每个爆炸,查看它是否与我们想要的具有属性的样式相匹配,并仅收集这些属性,然后将其内爆。
代码段:
<?php
$str = '.class-1,
.class-2,
class-3 {
}
.class-4,
class-5 {
}
.class-6,
class-7 {}
.not-empty-1 {font-size: 12;}
.not-empty-2 {
font-size: 12;
}
.not-empty-3 {
font-size: 12;margin-top:25px;
}';
$new_str = '';
for($i=0;$i<strlen($str);++$i){
if(strlen(trim($str[$i])) === 0) continue; // skip new lines,spaces, line feeds etc
$new_str .= $str[$i];
if($str[$i] == '}') $new_str .= ' ';
}
$results = [];
foreach(explode(" ",$new_str) as $css_style){
if(preg_match('/^(.+?)\{(.+?)\}$/',$css_style,$matches)){
$results[] = implode("\n",[$matches[1],"{\n ".$matches[2]."\n}"]);
}
}
echo implode("\n\n",$results);