Как вытащить имя сервера из UNC

Кто-нибудь сможет рассказать мне, как вытащить имя сервера из UNC?

ех.

//имя_сервера/каталог/каталог

Изменить : Прошу прощения, но похоже, что мне нужно прояснить ошибку: путь на самом деле больше похож:

//имя_сервера/d $/каталог

Я знаю, что это может немного изменить ситуацию

Ответ 1

Как насчет Uri:

Uri uri = new Uri(@"\\servername\d$\directory");
string[] segs = uri.Segments;
string s = "http://" + uri.Host + "/" + 
    string.Join("/", segs, 2, segs.Length - 2) + "/";

Ответ 2

Еще один вариант, чтобы показать разные параметры:

(?<=^//)[^/]++


Имя сервера будет находиться в \0 или $0 или просто результат функции, в зависимости от того, как вы это называете и что предлагает ваш язык.


Объяснение в режиме комментариев регулярных выражений:

(?x)      # flag to enable regex comments
(?<=      # begin positive lookbehind
^         # start of line
//        # literal forwardslashes (may need escaping as \/\/ in some languages)
)         # end positive lookbehind
[^/]++    # match any non-/ and keep matching possessively until a / or end of string found.
          # not sure .NET supports the possessive quantifier (++) - a greedy (+) is good enough here.

Ответ 3

Это должно сделать трюк.

^//([^/]+).*

Имя сервера находится в первой группе захвата

Ответ 4

Регулярное выражение для соответствия servername:

^//(\w+)

Ответ 5

Уродливый, но он просто работает:

var host = uncPath.Split(new [] {'\\'}, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault();