Написание регулярного выражения для обнаружения повторяющихся символов
Мне нужно написать регулярное выражение, которое идентифицировало бы слово с повторяющимся набором символов на конце . Согласно следующему фрагменту кода повторяющийся набор символов 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$"