Требуется, чтобы регулярное выражение только соответствовало последней точке, при этом следя за тем, чтобы после нее не осталось больше точек.
Чтобы сделать это, вы сопоставляете точку, которая требует экранирования, поэтому используйте \.
, затем используйте положительный прогноз нулевой ширины, чтобы убедиться, что остальная часть строки не имеет точки, т. Е. Используйте (?=[^.]+$)
В качестве альтернативы используйте отрицательный взгляд нулевой ширины. вперед, чтобы убедиться, что он не может найти точку, т.е. (?!.*\.)
Я предпочитаю первое, поэтому используйте \.(?=[^.]+$)
, что в Java означает "\\.(?=[^.]+$)"