2011-12-08 5 views
5

Я пытаюсь использовать регулярное выражение для сокращения строк повторяющихся символов. Например, я пытаюсь включить:Regex too greedy

Yaaaaaaaaay -> yaaay

hahahahahaha -> хахаха

toptoptoptop -> toptoptop

Таким образом, если я вижу последовательность символов повторяется 3 или более раз, замените его на последовательность длины 3. Вот проблема, которую я испытываю. Давайте рассмотрим строку

"hahahahahaha"
и использовать регулярное выражение:

(.+)\1{2,}

Матч заканчивается время haha. Я возился с попыткой только совместить «ха», но не могу понять. Я также хочу, чтобы решение расширялось до таких слов, как yaaaaaay, если это возможно. Любая помощь будет оценена.

матчи

ответ

8

Использовать нежадным .+? вместо.

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

Хорошая работа; очень изящное решение –

+0

Хорошо ... wow thanks ... Я пробовал (. +)? \ 1 {2,}, но мне нужен знак вопроса внутри. Извините за вопрос n00b –