2009-06-27 8 views
10

Sunucu adını UNC'den nasıl çıkaracağımı bana söyleyebilir misiniz?Bir UNC'den sunucu adı nasıl çekilir

ex.

// servername/dizin/dizin

Düzenleme : Özür dilerim ama ben bir hata netleştirmek gerekiyor gibi görünüyor :

// servername/d $: yol aslında daha gibidir/dizin

bu şeyleri biraz

+2

değil UNC yolları ters eğik çizgi karakterleri içeren vardır ileri slahlar? – SztupY

+0

evet bu gerçekten komik .. kimseyi yakalamadım (benim dahil!) – KevinDeus

cevap

18

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

Bu yapmalıyım hile değişebilir biliyorum.

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

sunucu adı ilk yakalama grubunda bulunan

+4

Bir satırın başlangıcında (^), iki eğik çizgi (//) ile eşleş, sonra başka bir eğik çizgi olmayan bir veya daha fazla (+) karakter^/]) ardından bir ya da daha fazla olayın oluşması (. *) "(" ve ") parensleri bir 'yakalama grubunu' belirtir. – bernie

+0

@Adam: Düzenli ifadenin gerçekte nasıl çalıştığını açıkladığınız için teşekkür ederiz. –

+1

@ Jason: Bunu yapmaktan memnun. Açıklamamdaki bir hata: * sembolü 'bir veya daha fazla' değil, 'sıfır veya daha fazla'. + Sembolü C# şu olsun burada yorumunu 1 kullanarak 'bir veya birden fazla' – bernie

1

Düzenli ifade servername maç için:

^//(\w+) 
+0

Adlandırılmış yakalama grupları hayranıyım, bu yüzden muhtemelen şunu değiştireceğim:^// (? \ w +)/ – Lee

+2

\ w [A-Za-z0-9_] eşleşecek - ancak sunucu adları bunlardan daha fazla karakter içerebilir? Çok detaylı ve iyi açıklanmış bir cevap için –

6

Bir başka seçenek gösteren farklı seçenekler uğruna:

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


Sunucu adı wi \0 veya $0'da ya da nasıl çalıştığınıza ve dilinizin ne sunduğuna bağlı olarak fonksiyonun sonucu olacaksınız. regex comment modunda


Açıklama:

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

+1. – bernie

+0

Bunu C# içinde denedim ve aşağıdaki hata iletisini aldım: "(? <=^//) [^ /] ++" ayrıştırma - İç içe niceleyici +. – KevinDeus

+2

@Kevin: sadece ikinci + sembolünü bırakın. – bernie

0

Çirkin ama sadece çalışır: Nasıl yaklaşık Uri

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