我的格式为字符串:
PROVIDER=Sybase.ASEOLEDBProvider.2;User ID=sa;Server Name=UKServer;Server Port Address=5001;Initial Catalog=master
现在可以在C#中使用正则表达式获取服务器名称的值吗?
请注意,服务器名称可以位于字符串中的任何位置,并且“=”的任何一侧可能有也可能没有空格,即fomate可能
... Server Name=UKServer;....
... Server Name = UKServer;....
... Server Name =UKServer;....
... Server Name= UKServer;....
答案 0 :(得分:3)
你真的不需要自己解析连接字符串;方便的OdbcConnectionStringBuilder
课程可以为你做。它实现IDictionary
,允许您按键检索连接字符串的所有属性。我确信它对你提到的不同类型的输入有合理的抵抗力,例如:额外的空白区域,关键字对的不同排序等等。
以下是针对您的样本进行测试的示例:
var connString = @"PROVIDER=Sybase.ASEOLEDBProvider.2;User ID=sa;Server Name=UKServer;Server Port Address=5001;Initial Catalog=master";
var connStringBuilder = new OdbcConnectionStringBuilder(connString);
var serverName = connStringBuilder["Server Name"].ToString();
答案 1 :(得分:1)
_serverName = RegEx.Match(inputString, "Server Name ?= ?([\\w]+);").Groups(1).Value;
故障:
Server Name ?= ? // Normal string, the ? means that the preceding character
// or group is optional (0 or 1)
([\w]+); // The parentheses define a group (the Group(0) is the
// always the whole match), so that you can easily get a
// substring of the match.
[\w]+ // Matches any alphabetical character, number or underscore
答案 2 :(得分:0)
这样的事情应该有效:
"Server Name\s*=\s*(\w+)\s*;"
答案 3 :(得分:0)
这样的事情怎么样:
[^&]*(i?)(Server Name\s|)((i?)[a-z]);
_serverName = RegEx.Match(inputString, "[^&]*(i?)(Server Name\s|)((i?)[a-z]);").Groups(2).Value;