2013-02-12 4 views
0

Это мое регулярное выражение: "(?<=^|\\s)([a-z])\\1{3,}(?=\\s|$)".соответствующие слова, содержащие повторяющиеся символы

Я пытаюсь совместить слова, которые повторяют символы> 2 подряд.

Таким образом, wwhhaaaat bananas ffffuuuuuu this is a test следует поймать wwhhaaaat и ffffuuuuuu.

Когда я запускаю это регулярное выражение в java, он ничего не ловит. Когда я запускаю ([a-z])\\1{3,}, он захватывает только повторяющиеся символы. Итак, я использую часть, чтобы соответствовать слову, содержащему символы.

Как это исправить?

ответ

1

попробовать

Matcher m = Pattern.compile("[a-z]*([a-z])\\1{3,}[a-z]*").matcher("So wwhhaaaat bananas ffffuuuuuu this is a test"); 
    while(m.find()) { 
     System.out.println(m.group()); 
    } 

отпечатки

wwhhaaaat 
ffffuuuuuu 
+0

Эй, что работает. Можете ли вы объяснить '[a-z] *'. Мне показалось, что я должен смотреть вперед, чтобы соответствовать всему слову. Как это делает [a-z] * '? Разве это не похоже на письмо? – user2001545

+0

Кажется логичным: любое количество букв (0 или более), за которыми следуют повторные 3 (или более) буквы, за которыми следует любое количество букв. BTW Я предлагаю \\ w –

+0

Спасибо! Ты обалденный. – user2001545

Смежные вопросы