Имеется тело POST-запроса:
cc_number=4111111111111111&amount=1500
Для записи в лог требуется привести его к виду
cc_number=XXXXXXXXXXXXXXX&amount=1500
Это можно сделать следующим образом:
$data = preg_replace(
'/(?<=cc_number=)([^&]+)/e',
'str_repeat("X", strlen("$1"))',
$data);
Но, поскольку использование модификатора eval является дурным тоном и в PHP 5.5 отмечено устаревшим, я переделал регулярное выражение с использованием preg_replace_callback:
$data = preg_replace_callback(
'/(?<=cc_number=)([^&]+)/',
function ($matches) { return str_repeat('X', strlen($matches[0])); },
$data);
Однако хотелось бы получить идеальный вариант с использованием чистого regexp.
Что-то вроде
$data = preg_replace($pattern, 'X', $data);
Возможно ли это? Потребуется ли рекурсия?