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

Php 用于标识CSS文件中没有内容的类/ID的正则表达式,php,css,preg-replace,Php,Css,Preg Replace,我正在更新我们系统中的一些旧CSS文件,我们有很多空类只是占用了文件中的空间。我很想学习如何编写正则表达式,但我就是不懂。我希望我接触到他们越多(用一个更连贯的解释),我就越能理解他们 问题 也就是说,我正在寻找一个表达式,该表达式将标识后跟“{”(有些在括号和“}”(空格不计算)的文本,如果括号和“}”之间没有字母或数字,它将被标识为匹配字符串 我想我可以在运行正则表达式之前删除文档中的空白,但我不想更改文本的基本结构。我希望把它放回一个大的 解释字符及其含义的额外点数,以及识别副本中没有任何

我正在更新我们系统中的一些旧CSS文件,我们有很多空类只是占用了文件中的空间。我很想学习如何编写正则表达式,但我就是不懂。我希望我接触到他们越多(用一个更连贯的解释),我就越能理解他们

问题

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

我想我可以在运行正则表达式之前删除文档中的空白,但我不想更改文本的基本结构。我希望把它放回一个大的

解释字符及其含义的额外点数,以及识别副本中没有任何文本或数字的行的表达式。我可能会在PHP脚本中使用最终表达式

tl;博士:

要匹配的正则表达式:

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

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

\{\s*\}
您必须同时逃逸{和},因为它们是正则表达式中的特殊字符

\s-表示任何空白字符,包括制表符、新行等


\s*-任意数量的空格

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

\{\s*\}
您必须同时逃逸{和},因为它们是正则表达式中的特殊字符

\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);

这是一个很好的开始。用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——我自己在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();

我不推荐使用正则表达式,因为我真的怀疑CSS是否是一个好方法

下载PHP——我自己在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();

这就行了。谢谢你的提醒!但我还是想知道如何使用正则表达式。这个就行了。谢谢你的提醒!但我还是想知道如何使用正则表达式,我注意到它只替换了方括号。有没有办法让它替换。或者#forward?我注意到它使用带有冒号的类/ID(例如使用“:visted”或“:hover”选择器)执行此操作!为什么它被结肠卡住了?更新:我在表达式的第一部分添加了一个\:,它成功了。谢谢我已经在学习了!啊哈,接得好!我担心我会错过一些像那样的小东西。我也会更新帖子,以防其他人试图复制它;也就是说,它们是紧接着其他注释的注释:$regex2='#/*\-+[\s|\w]*-***/\s*(?=/)#我“从头开始写那个婴儿;)我注意到它只替换了括号。有没有办法让它替换。或者#forward?我注意到它使用带有冒号的类/ID(例如使用“:visted”或“:hover”选择器)执行此操作!为什么它被结肠卡住了?更新:我在表达式的第一部分添加了一个\:,它成功了。谢谢我已经在学习了!啊哈,接得好!我担心我会错过一些像那样的小东西。我也会更新帖子,以防其他人试图复制它;也就是说,它们是紧接着其他注释的注释:$regex2='#/*\-+[\s|\w]*-***/\s*(?=/)#我“从头开始写那个婴儿;)实际上,pcre对{}非常宽容,当它们不能以特殊方式处理时,没有必要在这样的表达式中转义。实际上,pcre对{}非常宽容,当它们不能以特殊方式处理时,没有必要在这样的表达式中转义。