1

我正在编写一个函数,将长十六进制编码颜色(#334455)替换为短颜色( #345)。仅当十六进制中的每种颜色都是 17 的倍数(每个十六进制对由相同的字符组成)时,才能做到这一点。

eg#EEFFCC替换为#EFC,但 #EDFFCC不替换为任何内容。

我想通过单次preg_replace()调用来完成此操作,而无需任何自定义回调。

我已经尝试过这个:

$hex = preg_replace('/([0-f]){2}([0-f]){2}([0-f]){2}/i', '\1\2\3', $hex);

但这会缩短所有十六进制,而不仅仅是每对中具有相同字符的十六进制。我不知道如何只匹配相同字符的对。

请帮忙。

4

1 回答 1

4

试试这个 - 你只需要在匹配本身中使用反向引用

$hex = preg_replace('/([0-f])\1([0-f])\2([0-f])\3/i', '\1\2\3', $hex);
于 2009-08-27T21:22:31.973 回答