Это сложнее, чем вы можете себе представить. Ваш пример https://foo.com/bar, содержит запятую, которая является допустимым символом URL. Вот отличный пост о некоторых неприятностях:
https://blog.codinghorror.com/the-problem-with-urls/
https?://([-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|])
Хорошая отправная точка
Некоторые списки из «Освоения регулярных выражений» на эту тему:
http://regex.info/listing.cgi?ed=3&p=207
@ sjobe
>>> import re
>>> pattern = r'https?://([-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|])'
>>> url = re.compile(pattern)
>>> url.match('http://news.google.com/').groups()
('news.google.com/',)
>>> url.match('not a url').groups()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'groups'
>>> url.match('http://google.com/').groups()
('google.com/',)
>>> url.match('http://google.com').groups()
('google.com',)
извините, пример на python, а не на java, это более кратко. Java требует некоторого постороннего экранирования регулярного выражения.