为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
侃侃无极 2022-08-19 15:33:04
我有这些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,任何解决方案都是值得赞赏的。
查看完整描述

2 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

从最终模式的注释和制作人员名单到 @anubhava,对于您可以使用的示例数据:

^(?:[^{}\r\n]*\R)*+[^{}]+{\s*}\s*

解释

  • ^字符串的开头

  • (?:非捕获组

    • [^{}\r\n]*\R匹配 0+ 次除换行符或 Unicode 换行符序列以外的任何字符{}

  • )*+使用所有格量词关闭组并重复 0+ 次

  • [^{}]+匹配 1 次以上除或以外的任何字符{}

  • {\s*}匹配 和 中间有空格(请注意,这也与换行符匹配){}\s

  • \s*匹配可能的尾随空格字符

正则表达式演示


查看完整回答
反对 回复 2022-08-19
?
MMTTMM

TA贡献1869条经验 获得超4个赞

由于您标记了 ,我们可以进行一些字符串处理以使正则表达式更简单一些,我们可以只匹配单个样式并忽略所有其他不遵循此属性的人。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);

演示:https://3v4l.org/67mXE


查看完整回答
反对 回复 2022-08-19
  • 2 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号