fork download
  1. using System;
  2. using System.Linq;
  3. using System.Text;
  4. using System.Text.RegularExpressions;
  5.  
  6. public class Program
  7. {
  8. const string kvPair = @"(?<pair>(?<key>.*?)\s*=\s*(?<value>.*?))";
  9. const string kvpRegex = "^" + kvPair + "$";
  10. const string csRegex = @"^\s*(?<cs>(?:" + kvPair + @"\s*(;\s*|\s*$))+)$";
  11.  
  12. public static void Main(string[] args)
  13. {
  14. const string input = @"Data Source=Instance1;User ID=;Initial Catalog=DB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Auto Translate=False;";
  15.  
  16. var match = Regex.Match(input, csRegex);
  17. Console.WriteLine("======\nSuccess: {0}\n======", match.Success);
  18.  
  19. // 'smart' dictionary from the subcaptures:
  20. var dict = match.Groups["pair"]
  21. .Captures
  22. .Cast<Capture>()
  23. .Select(cap => Regex.Match(cap.Value, kvpRegex))
  24. .ToDictionary(submatch => submatch.Groups["key"].Value,
  25. submatch => submatch.Groups["value"].Value);
  26.  
  27. foreach (var kvp in dict)
  28. Console.WriteLine(kvp);
  29.  
  30. // Getting just the DB1:
  31. Console.WriteLine("======\nCatalog: {0}\n======", dict["Initial Catalog"]);
  32.  
  33. // raw access from csRegex full match:
  34. foreach (Capture cap in match.Groups["key"].Captures)
  35. Console.WriteLine("Key: '{0}'", cap.Value);
  36. foreach (Capture cap in match.Groups["value"].Captures)
  37. Console.WriteLine("Value: '{0}'", cap.Value);
  38.  
  39. Console.WriteLine("======\nConnection string: '{0}'", match.Groups["cs"].Value);
  40. }
  41. }
  42.  
Success #stdin #stdout 0.09s 37416KB
stdin
Standard input is empty
stdout
======
Success: True
======
[Data Source, Instance1]
[User ID, ]
[Initial Catalog, DB]
[Provider, SQLOLEDB.1]
[Integrated Security, SSPI]
[Auto Translate, False]
======
Catalog: DB
======
Key: 'Data Source'
Key: 'User ID'
Key: 'Initial Catalog'
Key: 'Provider'
Key: 'Integrated Security'
Key: 'Auto Translate'
Value: 'Instance1'
Value: ''
Value: 'DB'
Value: 'SQLOLEDB.1'
Value: 'SSPI'
Value: 'False'
======
Connection string: 'Data Source=Instance1;User ID=;Initial Catalog=DB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Auto Translate=False;'