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


