С помощью следующего шаблона RegEx:
(?<comment>(^#{2} [^\r\n]+[\s]+)*)(?:^\[(?:(?<hive>HK(?:LM|[DP]D|C[CUR]|U(SERS|SER|SR|S)))[:])?(?<name>[a-z0-9$][a-z0-9-_]{2,63})\])(?<items>[\S\s]*?)(?=\n{2,})
Синтаксический анализ следующего текста:
[HKLM:Connection]
AuthKey = 0x8a79b42z67fct29b42e07b3fd78nc540
Url = https://dev.somewebsite.com
ApiPath = /api/
[HKLM:Settings]
AutoMinimizeConsole = no
StyleFile = Default
PhoneNbrs = [+]?[01]{0,3}[-. ]?[(]?[0-9][0-9][0-9][)]?[-. ]?[0-9][0-9][0-9][-. ]?[0-9][0-9][0-9][0-9]
PostalCodes = [ABCEGHJKLMNPRSTVXYabceghjklmnprstvxy][0-9][ABCEGHJKLMNPRSTVWXYZabceghjklmnprstvwxyz][\s.-]?[0-9][ABCEGHJKLMNPRSTVWXYZabceghjklmnprstvwxyz][0-9]
[HKLM:Font-Mapping]
MonoSpaced = Courier New
User1 = Software Tester 7
User2 = Repetition Scrolling
User3 = basis333
[HKLM:UserInterface]
[HKCU:UserInterface]
[HKCU:Credentials]
Username =
Password? =
При вводе в онлайн-тесты Regex результаты выдаются, как и ожидалось, но в коде,совпадений не найдено.Используемая здесь переменная «data» заполняется текстом, представленным выше до этого сегмента:
public const string GROUP_PATTERN = @"(?<comment>(^#{2} [^\r\n]+[\s]+)*)(?:^\[(?:(?<hive>HK(?:LM|[DP]D|C[CUR]|U(SERS|SER|SR|S)))[:])?(?<name>[a-z0-9$][a-z0-9-_]{2,63})\])(?<items>[\S\s]*?)(?=\n{2,})";
Regex groupParser = new Regex(GROUP_PATTERN, RegexOptions.Compiled | RegexOptions.ExplicitCapture | RegexOptions.IgnoreCase | RegexOptions.Multiline);
MatchCollection matches = groupParser.Matches(data);
foreach (Match m in matches)
this.Add(IniGroupItem.Parse(m.Value));
В начале ForEach совпадений нет (должно быть шесть!) ..
Поскольку шаблон работает на тестовых сайтах, но не совсем в c #, я не знаю, как выяснить, какие проблемы возникают у компилятора.Есть идеи / предложения?