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

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

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

Например, я попробовал следующее:

$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( "/[^az]/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>'; 

Результаты:

 $t1 = This is a 999-999- test Sammy hello $t2 = This is a 999-999- test Sammy hello $t3 = This -is* ab 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 

Желаемый результат:

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

Как вы можете видеть, желаемый результат оставляет числа в одиночку и оставляет только 3 повторяющихся символа, т. Е. — ### * !!!

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

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

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

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

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

Codepad

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

РЕДАКТИРОВАТЬ: для не-номер или что-нибудь, что замените . с другими вещами, например [^\d] и т. д. /(([^\d])\2{2})\2*/