Ответ 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) + "/";
Кто-нибудь сможет рассказать мне, как вытащить имя сервера из UNC?
ех.
//имя_сервера/каталог/каталог
Изменить : Прошу прощения, но похоже, что мне нужно прояснить ошибку: путь на самом деле больше похож:
//имя_сервера/d $/каталог
Я знаю, что это может немного изменить ситуацию
Как насчет Uri
:
Uri uri = new Uri(@"\\servername\d$\directory");
string[] segs = uri.Segments;
string s = "http://" + uri.Host + "/" +
string.Join("/", segs, 2, segs.Length - 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.
Это должно сделать трюк.
^//([^/]+).*
Имя сервера находится в первой группе захвата
Регулярное выражение для соответствия servername
:
^//(\w+)
Уродливый, но он просто работает:
var host = uncPath.Split(new [] {'\\'}, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault();