Вот решение, которое разбивает URL-адрес на составные части; протокол, сайт и часть. Группа протоколов не требуется, поэтому вы могли бы дать выражение «www.foo.com/bar/123/abc». Группа деталей может содержать несколько подгрупп, представляющих папки и файлы на сайте.
^(?<protocol>.+://)?(?<site>[^/]+)/(?:(?<part>[^/]+)/?)*$
Вы бы использовали следующее выражение, чтобы получить 'foo'
string s = Regex.Match(@"http://www.foo.com/bar/123/abc", @"^(?<protocol>.+://)?(?<site>[^/]+)/(?:(?<part>[^/]+)/?)*$").Groups["part"].Captures[0].Value;
Разбивка результатов выражения выглядит следующим образом
протокол: http://
сайт: www.foo.com
часть [0]: бар
часть [1]: 123
часть [2]: abc