2009-06-27 7 views
2

Ich suche eine nette enge Regex-Lösung für dieses Problem. Ich suche einen UNC in einen UriReguläre Ausdrücke ~ konvertieren UNC zu URL

Problem umformatieren:

UNC-Verzeichnis in ein Uri

\\ server \ d $ \ x \ y \ z \ AAA neu formatiert werden muss

Bedürfnisse aussehen:

http://server/z/AAA

+1

Wie wissen Sie, dass "d $ \ x \ y \" von der Mitte entfernt werden sollte ? – RichieHindle

+0

Der Webserver ist z zugeordnet, sodass die anderen Kerle in der Mitte nicht in der endgültigen URL angezeigt werden müssen. – KevinDeus

Antwort

6

Ich denke, ein Ersatz ist in diesem Fall einfacher zu schreiben und zu verstehen als Regex. Gegeben:

string input = "\\\\server\\d$\\x\\y\\z\\AAA"; 

können Sie tun eine doppelte ersetzen:

string output = String.Format("http:{0}", input.Replace("\\d$\\x\\y", String.Empty).Replace("\\", "/")); 
+0

dieser ist genial. Vielen Dank :) – KevinDeus

0

Zwei Operationen:

  • erste, ersetzen "(.*)d\$\\x\\y\\(.*)" mit "http:\1\2" - dass die d$\x\y\ räumen werde, und stellen Sie vor den http:.

  • Ersetzen Sie dann \\ durch /, um den Job zu beenden.

Arbeit erledigt!

Edit: Ich nehme an, dass in C#, "\1" enthält die erste eingeklammerte Übereinstimmung (es tut in Perl). Wenn dies nicht der Fall, dann sollte es klar sein, was oben :)

1
^(\\\\\w+)\\.*(\\\w\\\w+)$ 
  • Erstes Spiel

    gemeint ist: \\server

  • zweiten Partie: \z\AAA

Concatenate auf ein string und dann http: voranstellen, um http:\\server\z\AAA zu erhalten. Ersetzen Sie \ durch /.

5

NET Framework unterstützt eine Klasse namens System.Uri, die die Umwandlung tun. Es ist einfacher und handhabt die Fluchtfälle. Es behandelt sowohl UNC, lokale Pfade zum Uri-Format.

C#:

Console.WriteLine((new System.Uri("C:\Temp\Test.xml")).AbsoluteUri); 

Powershell:

(New-Object System.Uri 'C:\Temp\Test.xml').AbsoluteUri 

Ausgang:

file:///C:/Temp/Test.xml