2009-06-27 7 views
0

Ich vermasselte meinen letzten Beitrag. Lets sehen, wenn ich dieses Recht erhalten kann.brauche einen C# Regex, um Servernamen aus UNC

Würde jemand in der Lage sein, mir zu sagen, wie man den Servernamen von einem UNC herauszieht? (Ich bin auf der Suche nach einem regex)

dies ist die Zeichenfolge ich den Server aus ziehen will:

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

mein Code in 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); 

} 

ich zu erfassen Suche nur : servername

keine Schrägstriche oder irgendetwas.

Antwort

1

Hinweis: Diese Antwort dient Bildungszwecken - besser das Uri-Objekt verwenden und vorhandene Funktionen nicht neu erfinden.

gleiche Lösung wie auf the other question, aber mit umgekehrten Schrägstrichen umgekehrt, und entging daher (und besitzergreifend quantifier entfernt, da regex C# nicht unterstützt):

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


Der Servername wird in \0 oder $0 oder einfach das Ergebnis der Funktion, je nachdem, wie Sie es nennen und was C# bietet.


Erklärung in regex Kommentar-Modus:

(?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. 
3

Diese Aufgabe ist einfach genug, dass es nicht wirklich eine Regex erfordert (es wäre sehr viel Overkill).

Versuchen Sie diesen Ansatz, der einen einfachen Aufruf an string.Split verwendet. Es sollte Ihnen erlauben, jeden Teil des Pfades trivial zu bekommen (obwohl Sie sagen, dass Sie das nicht brauchen).

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

Wenn Sie das Parsen vollständig manuell, es ist immer noch recht einfach machen wollte:

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

Danke für die schnelle Antwort! Dies ist wahrscheinlich der beste Weg, dies zu tun .. Ja, das ist eigentlich was ich angefangen habe, aber in diesem Fall bin ich nur auf der Suche nach einem einfachen Beispiel, so dass ich Regex besser verstehen kann. – KevinDeus

+0

FYI, C# Split ist ein Bugger mit diesem Escape-Zeichen. Ich musste dies tun: string server = directory.split ('\\') [2]; – KevinDeus

28

Warum Gebrauch regex wenn Uri wird es auch tun?

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

Ich mag dieses eine viel. Dieser ist wirklich cool. – KevinDeus

1

Da Sie versuchen, es mit Regex zu tun, hier ist, wie ich es tun würde. Dies erzeugt die gewünschten Ergebnisse.

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

produziert Server

Sie könnte wie für einige andere mögliche Server Zeichen zu ermöglichen, haben - und _ aber dies ist die Grundidee.

Aber die Verwendung der Uri-Klasse ist wahrscheinlich der beste Weg, um dieses spezifische Problem zu lösen.

+0

tatsächlich diese Sternchen wollte ich diesen Satz auf dieser Seite fett zu bekommen. Wie würde es sich ohne sie ändern? – KevinDeus

+0

wäre es dasselbe ohne sie. – jasonmw

+0

wird nur mit den möglichen Zeichen verglichen, die in den eckigen Klammern [] angegeben sind. – jasonmw