Попробуйте, используя preg_replace_callback
и анонимную функцию :
$string = preg_replace_callback('/\d{6,}/', function($match) { return str_repeat('X', strlen($match[0])); }, $string);
Анонимная функция используется для замены каждого вхождения из шести или более последовательных цифрна такую же сумму X
.Если ваша версия PHP не поддерживает анонимные функции (доступно с версии 5.3), используйте вместо них обычную функцию.