繁体   English   中英

用于识别CSS文件中没有内容的类/标识的正则表达式

[英]Regular Expression to identify classes/ids in a CSS file that have no contents

我正在更新系统中的一些旧CSS文件,并且我们有一堆包含很多空类的文件,它们只是占用了文件中的空间。 我很想学习如何编写正则表达式,但我只是不明白。 我希望我对自己的了解越多(带有更连贯的解释),最终我就会对他们越了解。

问题

也就是说,我正在寻找一个表达式,该表达式将标识文本后跟一个“ {”(有些之间有空格,有些没有),并且该括号和“}”之间没有字母或数字(空格't count),它将被识别为匹配的字符串。

我想我可以在文档中运行正则表达式之前将其裁剪出空白,但是我不想更改文本的基本结构。 我希望将其返回到大的<textarea>

奖励点用于解释字符及其含义,还有一个表达式,用于标识副本中没有任何文本或数字的行。 我可能会在PHP脚本中使用最终表达式。

tl; dr:

要匹配的正则表达式:

.a_class_or #an_id {
    /* if there aren't any alphanumerics in here, 
       this should be a matching line of text */
}

这将与{和}之间的零个或多个空格匹配

\{\s*\}

您必须转义{和},因为它们是RegEx中的特殊字符。

\\ s-表示任何空格字符,包括制表符,换行符等。

\\ s *-任意数量的空格

这是一个好的开始。 在PHP中测试。

/[#\w\s\.\-\[\]\=\^\~\:]+\{[\s\n\r\t]*\}/

现在将其分为几部分;

这部分与选择器匹配。 #表示ID,\\ w匹配字母数字和下划线,句点表示类。 然后,我为一些高级的CSS选择器添加了[] = ^和〜,但是如果它们经常使用它们,我会感到惊讶。

[#\w\s\.\-\[\]\=\^\~\:]+

第二部分在大括号内查找空白区域。 我们在这里有用于空格,换行符,返回值和制表符的特殊字符。 如果还有其他不匹配的地方。

\{[\s\n\r\t]*\}

如果您有兴趣,这是我用来在PHP中对其进行测试的代码。

<?php
$myString = <<<HERE
#myDiv a.awesome[href=google.com]{

}
HERE;
$regex = "/[#\w\s\.\-\[\]\=\^\~\:]+\{[\s\n\r\t]*\}/";
echo preg_replace($regex, "replaced!", $myString);

我不建议使用正则表达式,因为我真的怀疑CSS是否是正则语言

下载PHP的CSS Tidy-我只是在5分钟内自己做了一个测试。 效果很好。

require( 'csstidy/class.csstidy.php' );

$tidy = new csstidy();

$tidy->parse( "
.test {
  font-weight: bold;
}

.empty {
}

.test2 {
  font-style: italic;
}" );

echo '<pre>';
echo $tidy->print->plain();

这是输出

.test {
font-weight:700;
}

.test2 {
font-style:italic;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM