PCRE для замены # 334455 гекса на # 345 - PullRequest
1 голос
/ 28 августа 2009

Я пишу функцию, которая заменяет длинный шестнадцатеричный цвет (#334455) на короткий (#345). Это может быть сделано только тогда, когда каждый цвет в шестнадцатеричном формате кратен 17 (каждая шестнадцатеричная пара состоит из одинаковых символов).

например. #EEFFCC заменяется на #EFC, но # EDFFCC не заменяется ничем.

Я хочу сделать это с помощью одного preg_replace() вызова без каких-либо пользовательских обратных вызовов.

Я уже пробовал это:

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

Но это сокращает все гексы, а не только гексы с одинаковыми символами в каждой паре. Я не могу понять, как сопоставить только пары одного и того же персонажа.

Пожалуйста, помогите.

1 Ответ

4 голосов
/ 28 августа 2009

Попробуйте - вам просто нужно использовать обратных ссылок в самом совпадении

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