2011-12-08 15 views
5

Sto provando a usare regex per ridurre le stringhe di caratteri ripetuti. Per esempio, io sto cercando di girare:Regex troppo goloso

Yaaaaaaaaay -> yaaay

hahahahahaha -> hahaha

toptoptoptop -> toptoptop

Così, se vedo una sequenza di caratteri ripetuto 3 o più volte, sostituirlo con una sequenza di lunghezza 3. Ecco i problemi che sto avendo. Prendiamo in considerazione la stringa

"hahahahahaha"
e utilizzare il modello di espressione regolare:

(.+)\1{2,}

La partita finisce per essere haha. Ho smanettato con il tentativo di abbinare solo "ha", ma non riesco a capirlo. Voglio anche che la soluzione sia estendibile a parole come yaaaaay, se possibile. Qualsiasi aiuto sarà apprezzato.

partite

risposta

8

Usa un non-avido .+? invece.

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

Bel lavoro; soluzione molto elegante –

+0

Ok ... wow grazie ... Ho provato (. +)? \ 1 {2,} ma avevo bisogno del punto interrogativo all'interno. Ci scusiamo per la domanda n00b –