输入是一个多行字符串,例如:
table {
border:0;
border-spacing:0;
border-collapse:collapse;
margin-left:auto; // 'align:center' equivalent
margin-right:auto;
}
输出是一个带有“额外”空格的单行字符串&评论已删除,例如:
table { border:0; border-spacing:0; border-collapse:collapse; margin-left:auto;}
使用Perl执行此操作的一种方法是:
#! perl -w
use strict;
my $css = <<CSS;
table {
border:0;
border-spacing:0;
border-collapse:collapse;
margin-left:auto; // 'align:center' equivalent
margin-right:auto;
}
CSS
$css =~ s/\s{2,}/ /g; # globally replace 2 or more whitespace with 1 space
$css =~ s|\s+//.+\n||g; # globally replace C comment with empty string
$css =~ s|\n||g; # globally replace newline with empty string
print $css;
我尝试在PHP中做类似的事情,但输入
。 <?php
define("CSS_TABLE",
"table {
border:0;
border-spacing:0;
border-collapse:collapse;
margin-left:auto; // 'align:center' equivalent
margin-right:auto;
}");
$css = CSS_TABLE;
preg_replace("/\s\s+/", ' ', $css);
preg_replace("/\s+\/\/.+\n/", '', $css);
preg_replace("/\n/", '', $css);
echo("CSS-min: $css\n\n");
?>
注意:'define'不是问题,因为我也使用了'here'文档 - 无论如何都没有喜悦。我正在展示'define'而不是'here'文档(如在Perl示例中),因为现有的PHP代码使用它(以及其他一大堆!)。
我做错了什么?
答案 0 :(得分:1)
试试这样。
首先,您需要删除评论
define("CSS_TABLE",
"table {
border:0;
border-spacing:0;
border-collapse:collapse;
margin-left:auto; // 'align:center' equivalent
margin-right:auto;
}");
$css = CSS_TABLE;
$css = preg_replace("#;\s*//.*#m", ';', $css);
$css = preg_replace("/\s{2,}/", ' ', $css);
$css = preg_replace("/[\n\r]+/", '', $css);
echo("CSS-min: $css\n\n");
结果是
CSS-min: table { border:0; border-spacing:0; border-collapse:collapse; margin-left:auto; margin-right:auto; }
答案 1 :(得分:0)
试试这个
define("CSS_TABLE",
"table {
border:0;
border-spacing:0;
border-collapse:collapse;
margin-left:auto; // 'align:center' equivalent
margin-right:auto;
}");
$css = CSS_TABLE;
$css = preg_replace("#//.*#", '', $css);
$css = preg_replace("/\\s/", ' ', $css);
$css = preg_replace("/\\s+/", ' ', $css);
echo("CSS-min: $css");