Всякий раз, когда я думаю о регулярных выражениях, я думаю «Perl» и пишу быстрый и грязный шаблон (qr {xxx} x) и проверяю его на тестовом вводе.
В вашем случае, предполагая, что имя пользователяпароль, сервер и имя каталога должны быть проанализированы (и являются обязательными), я бы использовал следующее.Добавьте вопросительные знаки для «дополнительных» частей вашего шаблона, если вы хотите изменить это:
qr{
^ # Start of text
ftp: # Protocol
// # Double slash
([^:]+) # $1 = User Name
: # Colon
([^@]+) # $2 = Password
@ # AT sign
(.*?) # $3 = Server name
/ # Single slash
(.*?) # $4 = Directory name
(\?.*)? # Question mark ends URI
$ # End of text
}x;
Теперь, когда у нас есть шаблон, просто удвойте обратную косую черту (в части «Вопросительный знак»), удалите пробелыи комментарии (если хотите), и поместите в строку Java:
"^ftp://([^:]+):([^@]+)@(.*?)/(.*?)(\\?.*)?$";
Используйте это с Pattern / Matcher, и вы сможете уметь извлекать вещи красиво.