using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(\s*\{(?:\s*""Modulus""\s*:\s*""[a-zA-Z\d\+\/]+={0,2}""\s*(?(3)(?(4)(?(5)(?(6)(?(7)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)()|\s*""Exponent""\s*:\s*""[a-zA-Z\d\+\/]+={0,2}""\s*(?(2)(?(4)(?(5)(?(6)(?(7)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)()|\s*""P""\s*:\s*""[a-zA-Z\d\+\/]+={0,2}""\s*(?(2)(?(3)(?(5)(?(6)(?(7)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)()|\s*""Q""\s*:\s*""[a-zA-Z\d\+\/]+={0,2}""\s*(?(2)(?(3)(?(4)(?(6)(?(7)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)()|\s*""DP""\s*:\s*""[a-zA-Z\d\+\/]+={0,2}""\s*(?(2)(?(3)(?(4)(?(5)(?(7)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)()|\s*""DQ""\s*:\s*""[a-zA-Z\d\+\/]+={0,2}""\s*(?(2)(?(3)(?(4)(?(5)(?(6)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)()|\s*""InverseQ""\s*:\s*""[a-zA-Z\d\+\/]+={0,2}""\s*(?(2)(?(3)(?(4)(?(5)(?(6)(?(7)(?(9)|,)|,)|,)|,)|,)|,)|,)()|\s*""D""\s*:\s*""[a-zA-Z\d\+\/]+={0,2}""\s*(?(2)(?(3)(?(4)(?(5)(?(6)(?(7)(?(8)|,)|,)|,)|,)|,)|,)|,)()){8}\s*\}\s*\2\3\4\5\6\7\8\9)|(\s*\{(?:\s*""Modulus""\s*:\s*""[a-zA-Z\d\+\/]+={0,2}""\s*(?(12)|,)()|\s*""Exponent""\s*:\s*""[a-zA-Z\d\+\/]+={0,2}""\s*(?(11)|,)()){2}\s*\}\s*\11\12)";
string input = @"
{
""Modulus"": ""AQAB"",
""Exponent"": ""AQAB"",
""P"": ""AQAB"",
""Q"": ""AQAB"",
""DP"": ""AQAB"",
""DQ"": ""AQAB"",
""InverseQ"": ""AQAB"",
""D"": ""AQAB""
}
{
""Modulus"": ""AQAB"",
""Exponent"": ""AQAB""
}
(?(1)(?(2)(?(3)(?(4)(?(5)(?(6)(?(7)|,)|,)|,)|,)|,)|,)|,)
2-3-4-5-6-7-8-9
(?(3)(?(4)(?(5)(?(6)(?(7)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)
(?(2)(?(4)(?(5)(?(6)(?(7)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)
(?(2)(?(3)(?(5)(?(6)(?(7)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)
(?(2)(?(3)(?(4)(?(6)(?(7)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)
(?(2)(?(3)(?(4)(?(5)(?(7)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)
(?(2)(?(3)(?(4)(?(5)(?(6)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)
(?(2)(?(3)(?(4)(?(5)(?(6)(?(7)(?(9)|,)|,)|,)|,)|,)|,)|,)
(?(2)(?(3)(?(4)(?(5)(?(6)(?(7)(?(8)|,)|,)|,)|,)|,)|,)|,)
(?(DEFINE)(?P<b64>[a-zA-Z\d\+\/]+={0,2})(?P<Q1>\s*"")(?P<C1>(?(22)(?(23)(?(24)(?(25)(?(26)(?(27)(?(28)|,)|,)|,)|,)|,)|,)|,))(?P<C2>(?(21)(?(23)(?(24)(?(25)(?(26)(?(27)(?(28)|,)|,)|,)|,)|,)|,)|,))(?P<C3>(?(21)(?(22)(?(24)(?(25)(?(26)(?(27)(?(28)|,)|,)|,)|,)|,)|,)|,))(?P<C4>(?(21)(?(22)(?(23)(?(25)(?(26)(?(27)(?(28)|,)|,)|,)|,)|,)|,)|,))(?P<C5>(?(21)(?(22)(?(23)(?(24)(?(26)(?(27)(?(28)|,)|,)|,)|,)|,)|,)|,))(?P<C6>(?(21)(?(22)(?(23)(?(24)(?(25)(?(27)(?(28)|,)|,)|,)|,)|,)|,)|,))(?P<C7>(?(21)(?(22)(?(23)(?(24)(?(25)(?(26)(?(28)|,)|,)|,)|,)|,)|,)|,))(?P<C8>(?(21)(?(22)(?(23)(?(24)(?(25)(?(26)(?(27)|,)|,)|,)|,)|,)|,)|,))(?P<Q2>""\s*:\s*""(?P>b64)""\s*)(?P<Modulus>(?P>Q1)Modulus(?P>Q2))(?P<Exponent>(?P>Q1)Exponent(?P>Q2))(?P<P>(?P>Q1)P(?P>Q2))(?P<Q>(?P>Q1)Q(?P>Q2))(?P<DP>(?P>Q1)DP(?P>Q2))(?P<DQ>(?P>Q1)DQ(?P>Q2))(?P<InverseQ>(?P>Q1)InverseQ(?P>Q2))(?P<D>(?P>Q1)D(?P>Q2)))(\s*{\s*)(?:(?P>Modulus)(?P>C1)()|(?P>Exponent)(?P>C2)()|(?P>P)(?P>C3)()|(?P>Q)(?P>C4)()|(?P>DP)(?P>C5)()|(?P>DQ)(?P>C6)()|(?P>InverseQ)(?P>C7)()|(?P>D)(?P>C8)()){8}\s*}";
RegexOptions options = RegexOptions.Multiline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for C#, please visit: https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex(v=vs.110).aspx