Написание регулярного выражения для обнаружения повторяющихся символов

Мне нужно написать регулярное выражение, которое идентифицировало бы слово с повторяющимся набором символов на конце . Согласно следующему фрагменту кода повторяющийся набор символов An. Мне нужно написать регулярное выражение, чтобы оно было замечено и отображено.

В соответствии со следующим кодом \\w будет соответствовать любому символу слова (включая цифру, букву или специальный символ). Но я хочу только идентифицировать английских персонажей.

String stringToMatch = "IranAnAn";
Pattern p = Pattern.compile("(\\w)\\1+");
Matcher m = p.matcher(stringToMatch);
if (m.find())
{
    System.out.println("Word contains duplicate characters " + m.group(1));
}

ОБНОВЛЕНИЕ

Word contains duplicate characters a
Word contains duplicate characters a
Word contains duplicate characters An

Ответ 1

Вы хотите поймать как можно больше символов в своем наборе, поэтому вместо (\\w) вы должны использовать (\\w+), и вы хотите, чтобы последовательность была в конце, поэтому вам нужно добавить $ (и я удалили + после \\1, что не полезно для обнаружения повторения: требуется только одно повторение):

Pattern p = Pattern.compile("(\\w+)\\1$");

Затем ваша программа выводит An, как ожидалось.

Наконец, если вы хотите только захватить символы ascii, вы можете использовать [a-zA-Z] вместо \\w:

Pattern p = Pattern.compile("([a-zA-Z]+)\\1$");

И если вы хотите, чтобы набор символов был как минимум 2 символа:

Pattern p = Pattern.compile("([a-zA-Z]{2,})\\1$");

Ответ 2

Если на "только английские символы" вы имеете в виду A-Z и a-z, следующее регулярное выражение будет работать:

".*([A-Za-z]{2,})\\1$"