2013-10-11 73 views
1

我正在尋找正則表達式的幫助。我有以下UNC路徑\\server\share1\folder1,我想從中獲取server。服務器名稱將始終不同,有時也是IP地址。要求在反斜槓之間匹配

我有以下表達式,我一直在努力,但我似乎無法讓它按我想要的方式工作。

\\?.*\\ 

這將返回以下結果\\server\share\。有人可以幫我抓住server而不是\\server\

回答

2

您可以使用此:

^\\\\.*?\\ 

^是線錨的開始,只會在開始匹配。

.*?.*的修改版本,因此它將匹配它跟隨的模式匹配;通常被稱爲「儘可能少」匹配,反對它的「貪婪」對手。


或者,你可以用一個否定類:

^\\\\[^\\]+\\ 

[^\\]+除了反斜槓任何字符相匹配。


如果你想獲得server沒有反斜槓,你應該能夠使用捕獲組(通過使用括號內),並提取匹配的組(通過$1\1):

^\\\\(.*?)\\ 

^\\\\([^\\]+)\\ 

或者如果UNC發現任何默認的第一場比賽,那麼你可以簡單地使用[^\\]+

+1

感謝您的建議和幫助。我能夠得到我想要的價值「[^ \\] +」 – Mpit52

+0

@ Mpit52哦,是的,這通常取決於您使用的函數,但如果UNC處理正則表達式的方式接受這個,酷! :) – Jerry

+1

@Jerry:UNC路徑以* 2 *反斜槓開始,但我們沒有看到它們,因爲OP沒有使用代碼格式。這意味着你的正則表達式的長形式應該是''^ \\\\([^ \\] +)\''。 –

0

嘗試做與string.split(或等值的您正在使用的語言)「\」,然後從結果數組得到「服務器」

0

您可以使用lookaround

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

這將匹配\server\share\folder中的server