我有这些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, )。
任何解决方案都将不胜感激。
发布于 2020-01-27 08:17:18
发布于 2020-01-27 08:25:54
由于标记了PHP,我们可以执行一些字符串处理,使regex变得更简单,只需要匹配一个.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);https://stackoverflow.com/questions/59926947
复制相似问题