所以我试图缩小一些代码,我正在使用PHP函数preg_replace()这样做。我正在尝试压缩Hex颜色。例如:
#FF0000 => #F00
我found some code超过了互联网,到目前为止,这就是我所拥有的:
$hex_char = '[a-f0-9]';
$html = preg_replace("/(?<=^#)($hex_char)\\1($hex_char)\\2($hex_char)\\3\z/i", '\1\2\3', $html);
适用于以下字符串:
$html = "#FF0000";
好的,所以真正的问题是我需要代码来搜索像CSS等一大堆代码中的所有Hex颜色。它会是这样的:
<?php
$html = '
.this{
color: #FF0000;
background-color: #CCCCCC;
}
';
$hex_char = '[a-f0-9]';
$html = preg_replace("/(?<=^#)($hex_char)\\1($hex_char)\\2($hex_char)\\3\z/i", '\1\2\3', $html);
echo $html;
?>
我该怎么做?谢谢!
答案 0 :(得分:0)
从正则表达式中删除字符串锚点的lookbehind和end。
<?php
$html = <<<EOT
.this{
color: #FF0000;
background-color: #CCCCCC;
}
EOT;
$hex_char = '[a-f0-9A-F]';
$html = preg_replace("~#($hex_char)\\1($hex_char)\\2($hex_char)\\3~", '#$1$2$3', $html);
echo $html;
?>
<强>输出:强>
.this{
color: #F00;
background-color: #CCC;
}
答案 1 :(得分:0)
只需删除^
和\z
锚点即可。
'/\#\K([a-f0-9])\1([a-f0-9])\2([a-f0-9])\3/i'
或者
# '/(?<=\#)([a-f0-9])\1([a-f0-9])\2([a-f0-9])\3/i'
(?xi-)
(?<= \# )
( [a-f0-9] )
\1
( [a-f0-9] )
\2
( [a-f0-9] )
\3