2010-11-05 3 views
2

У меня есть строка в формате:Выберите значение, используя регулярное выражение

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;.... 

ответ

1
_serverName = RegEx.Match(inputString, "Server Name ?= ?([\\w]+);").Groups(1).Value; 

Breakdown:

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 
+1

'[Az ] 'эквивалентно' [AZ \\ [\\\\]^_ \ 'az]'; Я не думаю, что это действительно то, что вы имели в виду. –

+0

@ Алан Мур: Вы правы ... Я всегда забываю, что 'A-z' также включает в себя другие печатные символы. – Bobby

0

Что-то, как это должно работать:

"Server Name\s*=\s*(\w+)\s*;" 
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(); 
0

Как о чем-то вроде этого:

[^&]*(i?)(Server Name\s|)((i?)[a-z]); 

_serverName = RegEx.Match(inputString, "[^&]*(i?)(Server Name\s|)((i?)[a-z]);").Groups(2).Value; 
Смежные вопросы