需要一个c#regex来获取UNC的服务器名称

时间:2009-06-27 18:50:17

标签: c# regex url uri unc

我搞砸了我的上一篇文章。让我们看看我能否做到这一点..

有人能告诉我如何从UNC中提取服务器名称吗? (我正在寻找正则表达式)

这是我想从中提取服务器名称的字符串:

**\\\servername\d$\directory**

我的代码在C#中

Regex r = new Regex(?????, RegexOptions.IgnoreCase);

Match m = r.Match(@"\\servername\d$\directory"); 

CaptureCollection cc = m.Captures;

foreach (Capture c in cc)
{

    System.Console.WriteLine(c);

}

我希望捕获:servername

没有斜线或任何东西。

4 个答案:

答案 0 :(得分:28)

为什么Uri也会使用正则表达式?

    Uri uri = new Uri(@"\\servername\d$\directory");
    Console.WriteLine(uri.Host); // servername
    Console.WriteLine(uri.IsUnc); // true

答案 1 :(得分:3)

这个任务很简单,它实际上并不需要一个正则表达式(这将是一种过度杀伤力)。

尝试使用此方法,该方法使用对string.Split的简单调用。它应该允许你轻松地获得路径的每个部分(虽然你说你不需要它)。

var uncPath = @"\servername\d$\directory";    
var serverName = uncPath.Split('\')[1];

如果你想完全手动完成解析,它仍然非常简单:

var serverName = uncPath.Substring(1, uncPath.IndexOf('\', 1) - 1);

答案 2 :(得分:1)

既然您正在尝试使用正则表达式,那么我就是这样做的。 这会产生你想要的结果。

string s = @"**\\\servername\d$\directory**";
Console.WriteLine(Regex.Match(s, @"[A-Za-z][A-Za-z0-9]*").Captures[0].Value);
Console.ReadLine();

产生 服务器名

您可能必须允许其他一些潜在的服务器名称字符,例如 - 和_但这是基本的想法。

但是使用Uri类可能是解决这个特定问题的最佳方法。

答案 3 :(得分:1)

注意:此答案仅用于教育目的 - 最好使用Uri对象而不是重新发明现有功能。

the other question相同的解决方案,但反斜杠反转,因此被转义,(并且删除了占有量词,因为C#正则表达式不支持):

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


服务器名称将位于\0$0中,或者只是函数的结果,具体取决于您调用它的方式以及C#提供的内容。


正则表达式注释模式中的说明:

(?x)      # flag to enable regex comments
(?<=      # begin positive lookbehind
^         # start of line
\\\\      # escaped backslashes to give literal \\ chars.
)         # end positive lookbehind
[^\\]+    # greedily match any non-\ until a \ or end of string found.