regex: URL thingy with username, password, host and port

July 7, 2008 by Michael

Just in case i do keep forgetting that stuff, here’s a regex for decoding urls like


in Java:

final Hashtable<String, Integer> portMap = new Hashtable<String, Integer>();
portMap.put("ftp", 21);
portMap.put("sftp", 22);
final Pattern urlPattern = Pattern.compile("(ftp|sftp)://(\\S+):(\\S+)@([\\S&&[^:]]+)(:(\\d+))?");
final Matcher m = urlPattern.matcher(url);
	throw new RuntimeException("Invalid ftp url!");			
final String protocol =;
final String user     =;
final String password =;
final String host     =;
final int port = != null ? Integer.parseInt( : portMap.get(protocol);

Just in case anybody is interessted, i’m writing a wrapper around j2ssh and Commons::Net to support both ftp and sftp in a J2SE program.

One comment

  1. maurice wrote:

    Your post was useful for me, and I want to thank you for that. Because in my case I was trying to apply it for http/https protocols, I hit the situation were there can be a port number. Like ‘8080’ in So I had to adapt your regex pattern. But please note that according to, you could have a port specified in an ftp uri, too. Greetings from Spain!

    Posted on September 23, 2016 at 9:47 PM | Permalink
Post a Comment

Your email is never published nor shared. Required fields are marked *