У меня есть следующая строка ввода:
abc.def.ghi.jkl.mno
Количество символов точки может различаться на входе.Я хочу извлечь слово после последнего .
(т.е. mno
в приведенном выше примере).Я использую следующее regex
и оно прекрасно работает:
String input = "abc.def.ghi.jkl.mno";
Pattern pattern = Pattern.compile("([^.]+$)");
Matcher matcher = pattern.matcher(input);
if(matcher.find()) {
System.out.println(matcher.group(1));
}
Однако я использую стороннюю библиотеку, которая выполняет это сопоставление ( Kafka Connect , если быть точным) иЯ могу просто предоставить шаблон регулярного выражения.Проблема в том, что эта библиотека (код которой я не могу изменить) использует matches()
вместо find()
для сопоставления, и когда я выполняю тот же код с matches()
, она не работает, например:
String input = "abc.def.ghi.jkl.mno";
Pattern pattern = Pattern.compile("([^.]+$)");
Matcher matcher = pattern.matcher(input);
if(matcher.matches()) {
System.out.println(matcher.group(1));
}
Приведенный выше код ничего не печатает.Согласно javadoc , matches()
пытается соответствовать всей строке.Можно ли как-нибудь применить подобную логику, используя matches()
для извлечения mno
из моей входной строки?