Мне нужно проанализировать Windows .REG файлов, чтобы получить следующую информацию:
- имя ключа
- тип значения
- данные значения
Я попробовал этот пример проекта здесь , который делает именно то, что я хочу, но не может правильно обработать некоторые крайние случаи. Например, он не обрабатывает экранированные кавычки. В reg-файле экранированные кавычки выглядят так \ "
Тестовый reg-файл, который я использую для проверки:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\SampleTest\Key1]
@="This is the default value. 我爱喝咖啡"
"FilePath"="\"C:\\Program Files\\Internet Explorer\\iexplore.exe\""
"我爱喝咖啡"="ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
"BinaryData1"=hex:00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,11,11,11,11,11,\
11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,\
11,11,11,11,11,11,11,11,11,11,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,\
22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,33,33,33,33,33,33,33,33,\
33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,44,\
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,\
44,44,44,44,44,44,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,\
55,55,55,55,55,55,55,55,55,55,55,55,55,66,66,66,66,66,66,66,66,66,66,66,66,\
66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,77,77,77,77,77,\
77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,\
77,77,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,\
88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,99,99,99,99,99,99,99,99,\
99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,aa,\
aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,\
aa,aa,aa,aa,aa,aa,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,\
bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,\
cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,dd,dd,dd,dd,dd,\
dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,\
dd,dd,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,\
ee,ee,ee,ee,ee,ee,ee,ee,ee,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,\
ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff
"DwordMin"=dword:00000000
"SingleByte"=hex:ab
"DwordMax"=dword:ffffffff
"DwordSpecial"=dword:abcdef12
"QwordMin"=hex(b):00,00,00,00,00,00,00,00
"QwordMax"=hex(b):ff,ff,ff,ff,ff,ff,ff,ff
"QwordSpecial"=hex(b):12,f0,ce,cd,ab,ef,cd,ab
"MultiStringList"=hex(7):4d,00,75,00,6c,00,74,00,69,00,20,00,53,00,74,00,72,00,\
69,00,6e,00,67,00,20,00,56,00,61,00,6c,00,75,00,65,00,20,00,23,00,31,00,00,\
00,4d,00,75,00,6c,00,74,00,69,00,20,00,53,00,74,00,72,00,69,00,6e,00,67,00,\
20,00,56,00,61,00,6c,00,75,00,65,00,20,00,23,00,32,00,00,00,4d,00,75,00,6c,\
00,74,00,69,00,20,00,53,00,74,00,72,00,69,00,6e,00,67,00,20,00,56,00,61,00,\
6c,00,75,00,65,00,20,00,23,00,33,00,00,00,4d,00,75,00,6c,00,74,00,69,00,20,\
00,53,00,74,00,72,00,69,00,6e,00,67,00,20,00,56,00,61,00,6c,00,75,00,65,00,\
20,00,23,00,34,00,00,00,4d,00,75,00,6c,00,74,00,69,00,20,00,53,00,74,00,72,\
00,69,00,6e,00,67,00,20,00,56,00,61,00,6c,00,75,00,65,00,20,00,23,00,35,00,\
00,00,4d,00,75,00,6c,00,74,00,69,00,20,00,53,00,74,00,72,00,69,00,6e,00,67,\
00,20,00,56,00,61,00,6c,00,75,00,65,00,20,00,23,00,36,00,00,00,4d,00,75,00,\
6c,00,74,00,69,00,20,00,53,00,74,00,72,00,69,00,6e,00,67,00,20,00,56,00,61,\
00,6c,00,75,00,65,00,20,00,23,00,37,00,00,00,4d,00,75,00,6c,00,74,00,69,00,\
20,00,53,00,74,00,72,00,69,00,6e,00,67,00,20,00,56,00,61,00,6c,00,75,00,65,\
00,20,00,23,00,38,00,00,00,4d,00,75,00,6c,00,74,00,69,00,20,00,53,00,74,00,\
72,00,69,00,6e,00,67,00,20,00,56,00,61,00,6c,00,75,00,65,00,20,00,23,00,39,\
00,00,00,4d,00,75,00,6c,00,74,00,69,00,20,00,53,00,74,00,72,00,69,00,6e,00,\
67,00,20,00,56,00,61,00,6c,00,75,00,65,00,20,00,23,00,31,00,30,00,00,00,00,\
00
"ExpandableString"=hex(2):25,00,57,00,49,00,4e,00,44,00,49,00,52,00,25,00,5c,\
00,25,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,69,00,6c,00,65,00,\
73,00,25,00,5c,00,25,00,54,00,45,00,4d,00,50,00,25,00,00,00
"SpecialChar"="~`!@#$%^&*()_+[]\\{}|;',./[]\\"
[HKEY_CURRENT_USER\SOFTWARE\SampleTest\Key1\Key2]
@="Key2 Default VAlue"
[HKEY_CURRENT_USER\SOFTWARE\SampleTest\Key1\Key2\Key3]
@="Key 3 Default VAlue"
[HKEY_CURRENT_USER\SOFTWARE\SampleTest\Key1\New Key #1]
"~!@#$%^&*()_+{}|[]\\;',./<>?;'\""="strange reg key name"
[HKEY_CURRENT_USER\SOFTWARE\SampleTest\Key1\New Key #2]
[HKEY_CURRENT_USER\SOFTWARE\SampleTest\KEY~`!@#$%^&*()-+=[]{}|;'":<>?,./]
"Strange2"="More strange data"
[HKEY_LOCAL_MACHINE\SOFTWARE\SampleTest]
[HKEY_LOCAL_MACHINE\SOFTWARE\SampleTest\Key1]
@="This is the default value. 我爱喝咖啡"
"我爱喝咖啡"="I love cofeeeeeeeeeeeeeeeeeeeeeeeeeeeABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
"BinaryData1"=hex:00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,11,11,11,11,11,\
11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,\
11,11,11,11,11,11,11,11,11,11,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,\
22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,33,33,33,33,33,33,33,33,\
33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,44,\
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,\
44,44,44,44,44,44,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,\
55,55,55,55,55,55,55,55,55,55,55,55,55,66,66,66,66,66,66,66,66,66,66,66,66,\
66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,77,77,77,77,77,\
77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,\
77,77,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,\
88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,99,99,99,99,99,99,99,99,\
99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,aa,\
aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,aa,\
aa,aa,aa,aa,aa,aa,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,\
bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,bb,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,\
cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,cc,dd,dd,dd,dd,dd,\
dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,\
dd,dd,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,ee,\
ee,ee,ee,ee,ee,ee,ee,ee,ee,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,\
ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff
"DwordMin"=dword:00000000
"SingleByte"=hex:ab
"DwordMax"=dword:ffffffff
"DwordSpecial"=dword:abcdef12
"QwordMin"=hex(b):00,00,00,00,00,00,00,00
"QwordMax"=hex(b):ff,ff,ff,ff,ff,ff,ff,ff
"QwordSpecial"=hex(b):12,f0,ce,cd,ab,ef,cd,ab
"MultiStringList"=hex(7):4d,00,75,00,6c,00,74,00,69,00,20,00,53,00,74,00,72,00,\
69,00,6e,00,67,00,20,00,56,00,61,00,6c,00,75,00,65,00,20,00,23,00,31,00,00,\
00,4d,00,75,00,6c,00,74,00,69,00,20,00,53,00,74,00,72,00,69,00,6e,00,67,00,\
20,00,56,00,61,00,6c,00,75,00,65,00,20,00,23,00,32,00,00,00,4d,00,75,00,6c,\
00,74,00,69,00,20,00,53,00,74,00,72,00,69,00,6e,00,67,00,20,00,56,00,61,00,\
6c,00,75,00,65,00,20,00,23,00,33,00,00,00,4d,00,75,00,6c,00,74,00,69,00,20,\
00,53,00,74,00,72,00,69,00,6e,00,67,00,20,00,56,00,61,00,6c,00,75,00,65,00,\
20,00,23,00,34,00,00,00,4d,00,75,00,6c,00,74,00,69,00,20,00,53,00,74,00,72,\
00,69,00,6e,00,67,00,20,00,56,00,61,00,6c,00,75,00,65,00,20,00,23,00,35,00,\
00,00,4d,00,75,00,6c,00,74,00,69,00,20,00,53,00,74,00,72,00,69,00,6e,00,67,\
00,20,00,56,00,61,00,6c,00,75,00,65,00,20,00,23,00,36,00,00,00,4d,00,75,00,\
6c,00,74,00,69,00,20,00,53,00,74,00,72,00,69,00,6e,00,67,00,20,00,56,00,61,\
00,6c,00,75,00,65,00,20,00,23,00,37,00,00,00,4d,00,75,00,6c,00,74,00,69,00,\
20,00,53,00,74,00,72,00,69,00,6e,00,67,00,20,00,56,00,61,00,6c,00,75,00,65,\
00,20,00,23,00,38,00,00,00,4d,00,75,00,6c,00,74,00,69,00,20,00,53,00,74,00,\
72,00,69,00,6e,00,67,00,20,00,56,00,61,00,6c,00,75,00,65,00,20,00,23,00,39,\
00,00,00,4d,00,75,00,6c,00,74,00,69,00,20,00,53,00,74,00,72,00,69,00,6e,00,\
67,00,20,00,56,00,61,00,6c,00,75,00,65,00,20,00,23,00,31,00,30,00,00,00,00,\
00
"ExpandableString"=hex(2):25,00,57,00,49,00,4e,00,44,00,49,00,52,00,25,00,5c,\
00,25,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,69,00,6c,00,65,00,\
73,00,25,00,5c,00,25,00,54,00,45,00,4d,00,50,00,25,00,00,00
"FilePath"="\"C:\\Program Files\\Internet Explorer\\iexplore.exe\""
"SpecialChar"="~`!@#$%^&*()_+[]\\{}|;',./[]\\"
[HKEY_LOCAL_MACHINE\SOFTWARE\SampleTest\Key1\Key2]
@="Key2 Default VAlue"
[HKEY_LOCAL_MACHINE\SOFTWARE\SampleTest\Key1\Key2\Key3]
@="Key 3 Default VAlue"
[HKEY_LOCAL_MACHINE\SOFTWARE\SampleTest\Key1\New Key #1]
"~!@#$%^&*()_+{}|[]\\;',./<>?;'\""="strange reg key name"
[HKEY_LOCAL_MACHINE\SOFTWARE\SampleTest\Key1\New Key #2]
[HKEY_LOCAL_MACHINE\SOFTWARE\SampleTest\KEY~`!@#$%^&*()-+=[]{}|;'":<>?,./]
"Strange2"="More strange data"
Я пытаюсь исправить то, как он обрабатывает строку:
"FilePath"="\"C:\\Program Files\\Internet Explorer\\iexplore.exe\""
Соответствующий код использует регулярное выражение:
/// <summary>
/// Creates a flat Dictionary using given search pattern
/// </summary>
/// <param name="content">The content string to be parsed</param>
/// <returns>A Dictionary with retrieved keys and remaining content</returns>
private Dictionary<String, String> NormalizeValuesDictionary(String content)
{
string searchPattern = @"^[\t ]*("".+""|@)=(""[^""]*""|[^""]+)";
MatchCollection matches = Regex.Matches(content, searchPattern, RegexOptions.Multiline);
Dictionary<String, String> dictKeys = new Dictionary<string, string>();
foreach (Match match in matches)
{
try
{
//Retrieve key
String sKey = match.Groups[1].Value;
//Retrieve value
String sValue = match.Groups[2].Value;
//Removing the ending CR
while (sKey.EndsWith("\r\n"))
{
sKey = sKey.Substring(0, sKey.Length - 2);
}
if (sKey == "@")
sKey = "";
else
sKey = StripeLeadingChars(sKey, "\"");
while (sValue.EndsWith("\r\n"))
{
sValue = sValue.Substring(0, sValue.Length - 2);
}
if (dictKeys.ContainsKey(sKey))
{
string tmpcontent = dictKeys[sKey];
StringBuilder tmpsb = new StringBuilder(tmpcontent);
if (!tmpcontent.EndsWith(Environment.NewLine)) tmpsb.AppendLine();
tmpsb.Append(sValue);
dictKeys[sKey] = tmpsb.ToString();
}
else
{
dictKeys.Add(sKey, sValue);
}
}
catch (Exception ex)
{
throw new Exception(String.Format("Exception thrown on processing string {0}", match.Value), ex);
}
}
return dictKeys;
}
Я исправил регулярное выражение для обработки экранированных кавычек (\ ") следующим образом:
string searchPattern = "^[\\t ]*(\"[^\"\\\\]*(?:\\\\.+[^\"\\\\]*)*\"|@)=(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"+)";
, но теперь это не так не разбирать не строковые ключи, т.е. BinaryData1. Я пытаюсь понять, какое регулярное выражение может обрабатывать все типы данных, но также включать в строки экранированные кавычки.