PHP - необходимо удалить повторяющиеся символы в строке, но хотелось бы включить исключения

Я искал во всем Интернете решение, но не смог найти.

Мне нужно удалить повторяющиеся символы внутри строки, но я также хотел бы включить исключение, чтобы позволить целому количеству символов повторяться / оставаться в строке.

For example, I tried the following:

$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>';

Results:

$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

The desired out put would be:

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

Как видите,desired вывод оставляет только цифры и оставляет только 3 повторяющихся символа, т.е. --- ###* !!!

Я хотел бы иметь возможность изменить исключения с 3 на любое другое целое число, если это возможно.

Заранее спасибо.

Ответы на вопрос(2)

Это сделает это:

preg_replace('/(([^\d])\2\2)\2+/', '$1', $str);

[^\d] соответствует одному символу, который не является цифрой.
\2 относится к захваченной цифре
$1 относится к первой захваченной группе, которая будет тремя первыми повторяющимися символами, поэтому дополнительные\2+ раздевается.

Codepad

/((.)\2{2})\2*/ Если тебе нужно исключениеn, ставитьn-1 в фигурной скобке{n-1}: /((.)\2{n-1})\2*/

EDIT: для не-номер или что-то, что вы, заменить. с другими вещами, например[^\d] так далее./(([^\d])\2{2})\2*/

ВАШ ОТВЕТ НА ВОПРОС