正则表达式搜索十六进制颜色代码

时间:2014-10-13 04:10:33

标签: php regex preg-replace

所以我试图缩小一些代码,我正在使用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;

?>

我该怎么做?谢谢!

2 个答案:

答案 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