2011-12-08 13 views
5

Estoy tratando de usar expresiones regulares para reducir cadenas de caracteres repetidos. Por ejemplo, estoy tratando de convertir:Regex demasiado codicioso

Yaaaaaaaaay -> yaaay

jajajajajaja -> jajaja

toptoptoptop -> toptoptop

Por lo tanto, si veo una secuencia de caracteres repetido 3 o más veces, reemplácelo con una secuencia de longitud 3. Aquí está el problema que estoy teniendo. Consideremos la cadena

"hahahahahaha"
y utilizar el patrón de expresión:

(.+)\1{2,}

El partido termina siendo haha. He jugueteado con tratar de hacer coincidir solo la "ha", pero no puedo entenderlo. También quiero la solución extensible a palabras como yaaaaaay si es posible. Cualquier ayuda será apreciada.

partidos

Respuesta

8

Use un no expansivo .+? lugar.

(.+?)\1{2,} 
+0

Buen trabajo; solución muy elegante –

+0

Ok ... wow gracias ... Probé (. +)? \ 1 {2,} pero necesitaba el signo de interrogación en el interior. Perdón por la pregunta n00b –

Cuestiones relacionadas