使用 PHP preg_replace 删除空 CSS 选择器
Removing empty CSS Selector with PHP preg_replace
我正在尝试通过压缩获得整个 CSS 文件。它工作正常,但我想删除空的 CSS 选择器。这个文件是程序生成的,所以它留下了一些空标签,而不是手动删除它们:
$buffer = str_replace('#content>#columns>#article{}', '', $buffer);
$buffer = str_replace('.menuDeeper88{}', '', $buffer);
我试过这样删除它们:
$buffer = preg_replace('/\}[.*?]\{\}/', '\}', $buffer);
我想像这样(只是澄清一下):
Replace any case of '}ANY_CHARACTERS{}' with ''
但是preg_replace方法没有用。我希望这里有人可以帮助我让它工作。
先谢谢你了。
使用这个:
preg_replace('/(?:[^\r\n,{}]+)(?:,(?=[^}]*{)|\s*{[\s]*})/', '', $buffer);
测试:https://regex101.com/r/pX0wR0/3
正则表达式修改自:What is the REGEX of a CSS selector
您可以使用这种方法:
$css = "#content>#columnsA{min‐width: 500px;}#articleA{ }.menuUpper88{}#content>#columnsB>{min‐width: 700px;}#articleB{}.menuUpper88{}.header {background-color: #fff;background-image: url(image.gif);background-repeat: no-repeat;background-position: top left;}";
$css_splitted_by_closed_bracket = preg_split("/\s*\}/i", $css);
function get_css_without_empty_selector($data)
{
$result = "";
foreach ($data as $item) {
if($item != "" && substr($item, -1) != '{') {
$result .= $item . "}";
}
}
return $result;
}
get_css_without_empty_selector($css_splitted_by_closed_bracket);
运行 代码在这里:https://3v4l.org/9Cskr
我没有得到 Jim 关于使用分组选择器的回答。
试试这个:
preg_replace('/[a-zA-Z0-9\s#=",-:()\[\]]+\{\s*\}/', '', $buffer);
我正在尝试通过压缩获得整个 CSS 文件。它工作正常,但我想删除空的 CSS 选择器。这个文件是程序生成的,所以它留下了一些空标签,而不是手动删除它们:
$buffer = str_replace('#content>#columns>#article{}', '', $buffer);
$buffer = str_replace('.menuDeeper88{}', '', $buffer);
我试过这样删除它们:
$buffer = preg_replace('/\}[.*?]\{\}/', '\}', $buffer);
我想像这样(只是澄清一下):
Replace any case of '}ANY_CHARACTERS{}' with ''
但是preg_replace方法没有用。我希望这里有人可以帮助我让它工作。
先谢谢你了。
使用这个:
preg_replace('/(?:[^\r\n,{}]+)(?:,(?=[^}]*{)|\s*{[\s]*})/', '', $buffer);
测试:https://regex101.com/r/pX0wR0/3
正则表达式修改自:What is the REGEX of a CSS selector
您可以使用这种方法:
$css = "#content>#columnsA{min‐width: 500px;}#articleA{ }.menuUpper88{}#content>#columnsB>{min‐width: 700px;}#articleB{}.menuUpper88{}.header {background-color: #fff;background-image: url(image.gif);background-repeat: no-repeat;background-position: top left;}";
$css_splitted_by_closed_bracket = preg_split("/\s*\}/i", $css);
function get_css_without_empty_selector($data)
{
$result = "";
foreach ($data as $item) {
if($item != "" && substr($item, -1) != '{') {
$result .= $item . "}";
}
}
return $result;
}
get_css_without_empty_selector($css_splitted_by_closed_bracket);
运行 代码在这里:https://3v4l.org/9Cskr
我没有得到 Jim 关于使用分组选择器的回答。
试试这个:
preg_replace('/[a-zA-Z0-9\s#=",-:()\[\]]+\{\s*\}/', '', $buffer);