[英]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.