2013-10-11 61 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