猿问

通过正则表达式删除没有属性的 CSS 类

我有这些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,


任何解决方案都是值得赞赏的。


侃侃无极
浏览 132回答 2
2回答

青春有我

从最终模式的注释和制作人员名单到 @anubhava,对于您可以使用的示例数据:^(?:[^{}\r\n]*\R)*+[^{}]+{\s*}\s*解释^字符串的开头(?:非捕获组[^{}\r\n]*\R匹配 0+ 次除换行符或 Unicode 换行符序列以外的任何字符{})*+使用所有格量词关闭组并重复 0+ 次[^{}]+匹配 1 次以上除或以外的任何字符{}{\s*}匹配 和 中间有空格(请注意,这也与换行符匹配){}\s\s*匹配可能的尾随空格字符正则表达式演示

MMTTMM

由于您标记了 ,我们可以进行一些字符串处理以使正则表达式更简单一些,我们可以只匹配单个样式并忽略所有其他不遵循此属性的人。PHP.some_class{some_props}我们可以忽略所有空格,新行,只收集字符串中的文本,每个样式之间都有一个空格作为分隔符。现在,我们可以在每个属性上爆炸,看看它是否与我们想要的样式相匹配,该样式具有属性,并且仅收集这些属性并在以后内爆它们。片段:<?php$str = '.class-1,.class-2,class-3 {&nbsp; &nbsp; }.class-4,class-5 {}.class-6,class-7 {}.not-empty-1 {font-size: 12;}.not-empty-2 {&nbsp; &nbsp; font-size: 12;}.not-empty-3 {font-size: 12;margin-top:25px;}';$new_str = '';for($i=0;$i<strlen($str);++$i){&nbsp; &nbsp; if(strlen(trim($str[$i])) === 0) continue; // skip new lines,spaces, line feeds etc&nbsp; &nbsp; $new_str .= $str[$i];&nbsp; &nbsp; if($str[$i] == '}') $new_str .= ' ';}$results = [];foreach(explode(" ",$new_str) as $css_style){&nbsp; &nbsp; if(preg_match('/^(.+?)\{(.+?)\}$/',$css_style,$matches)){&nbsp; &nbsp; &nbsp; &nbsp; $results[] = implode("\n",[$matches[1],"{\n ".$matches[2]."\n}"]);&nbsp; &nbsp; }}echo implode("\n\n",$results);演示:https://3v4l.org/67mXE
随时随地看视频慕课网APP
我要回答