preg_replace preg_match_all preg_match pattern matches especiales ejemplos caracteres php string preg-replace duplicates

preg_match_all - PHP: necesita eliminar caracteres duplicados dentro de una cadena, pero desea incluir excepciones



preg_replace caracteres especiales (2)

He estado buscando en toda la Internet una solución, pero no pude encontrar una.

Necesito eliminar los 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, intenté 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 puede ver, la salida deseada 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.


Esto lo hará:

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

[^/d] coincide con un solo carácter que no es un dígito.
/2 refiere al dígito capturado
$1 refiere al primer grupo capturado, que serán los primeros tres caracteres repetidos, por lo que se extrae el /2+ extra.

Codepad


La expresión regular que está buscando: /((.)/2{2})/2*/ Si necesita la excepción n , ponga n-1 en la llave {n-1} : /((.)/2{n-1})/2*/

EDITAR: para no-número o lo que sea que, reemplace . con otras cosas, por ejemplo [^/d] etc. /(([^/d])/2{2})/2*/