PHP: es necesario eliminar los caracteres duplicados dentro de una cadena, pero le gustaría incluir excepciones

He estado buscando en todo el Internet una solución, pero no pude encontrar una.

Necesito eliminar caracteres duplicados dentro de una cadena, pero también me gustaría incluir una excepción para permitir que una cantidad entera de caracteres se repita / permanezca en la cadena.

Por ejemplo, he intentado lo siguiente:

$str = 'This ----------is******** a bbbb 999-999-9999 ******** 8888888888 test 4444444444 ********##########Sammy!!!!!! ###### hello !!!!!!';

$t1 = preg_replace('/(.)\1{3,}/','',$str);
$t2 = preg_replace('/(\S)\1{3,}/','',$str);
$t3 = preg_replace('{(.)\1+}','$1',$str);
$t4 = preg_replace("/[;,:\s]+/",',',$str);
$t5 = preg_replace('/\W/', '', $str);
$t6 = preg_replace( "/[^a-z]/i", "", $str);

echo '$t1 = '.$t1.'<br>';
echo '$t2 = '.$t2.'<br>';
echo '$t3 = '.$t3.'<br>';
echo '$t4 = '.$t4.'<br>';
echo '$t5 = '.$t5.'<br>';
echo '$t6 = '.$t6.'<br>';

Resultados:

$t1 = This is a 999-999- test Sammy hello 
$t2 = This is a 999-999- test Sammy hello 
$t3 = This -is* a b 9-9-9 * 8 test 4 *#Samy! # helo !
$t4 = This,----------is********,a,bbbb,999-999-9999,********,8888888888,test,4444444444,********##########Sammy!!!!!!,######,hello,!!!!!!
$t5 = Thisisabbbb99999999998888888888test4444444444Sammyhello
$t6 = ThisisabbbbtestSammyhello

La salida deseada sería:

This ---is*** a bbbb 999-999-9999 *** 8888888888 test 4444444444 ***###Sammy!!! ### hello !!!

Como puedes ver, ladeseado la salida deja los números solos y solo deja 3 caracteres repetidos, es decir, --- ###* !!!

Me gustaría poder cambiar las excepciones de 3 a cualquier otro entero si es posible.

Gracias por adelantado.

Respuestas a la pregunta(2)

Su respuesta a la pregunta