[{"data":1,"prerenderedAt":838},["ShallowReactive",2],{"content-hero-\u002Fcodesnippets\u002Fcsharp\u002Fregex-pattern-recursion-parentheses-brackets":3,"content-query-LlMupLmtLr":6},{"title":4,"imageUrl":5},"Regex Pattern recursion famous test solution","\u002Fimages\u002Fthumbnails\u002Flogo_maximilien_zakowski_csharp.gif",{"_path":7,"_dir":8,"_draft":9,"_partial":9,"_locale":10,"title":4,"description":11,"imageUrl":5,"body":12,"_type":832,"_id":833,"_source":834,"_file":835,"_stem":836,"_extension":837},"\u002Fcodesnippets\u002Fcsharp\u002Fregex-pattern-recursion-parentheses-brackets","csharp",false,"","NUnit acceptance tests and a recursive regex solution for balanced parentheses and brackets in C#.",{"type":13,"children":14,"toc":830},"root",[15,23,28,508,513,526,531,824],{"type":16,"tag":17,"props":18,"children":19},"element","p",{},[20],{"type":21,"value":22},"text","It has become very common and thus having a test without a solution for me as I badly blundered because of these test for a specific candidature make me think that it may has become very interesting to keep solution somewhere on my website.",{"type":16,"tag":17,"props":24,"children":25},{},[26],{"type":21,"value":27},"This is the acceptation tests :",{"type":16,"tag":29,"props":30,"children":33},"pre",{"className":31,"code":32,"language":8,"meta":10,"style":10},"language-csharp shiki shiki-themes github-light github-dark","using NUnit.Framework;\n\nnamespace maximilien.zakowski.Tests\n{\n    public class Tests\n    {\n        private Library BuildTested()\n        {\n            return new ParenthesesBracketsPatternTester();\n        }\n\n        [TestCase(\"()\")]\n        [TestCase(\"[]\")]\n        [TestCase(\"[()]\")]\n        [TestCase(\"[[()]]\")]\n        [TestCase(\"[()[]]\")]\n        [TestCase(\"([()[]])\")]\n        public void Test1(string validated)\n        {\n            var tested = BuildTested();\n            Assert.IsTrue(tested.IsValid(validated));\n        }\n    }\n}\n",[34],{"type":16,"tag":35,"props":36,"children":37},"code",{"__ignoreMap":10},[38,72,82,114,123,142,151,175,184,208,217,225,255,280,305,330,355,380,418,426,453,482,490,499],{"type":16,"tag":39,"props":40,"children":43},"span",{"class":41,"line":42},"line",1,[44,50,56,62,67],{"type":16,"tag":39,"props":45,"children":47},{"style":46},"--shiki-default:#D73A49;--shiki-dark:#F97583",[48],{"type":21,"value":49},"using",{"type":16,"tag":39,"props":51,"children":53},{"style":52},"--shiki-default:#6F42C1;--shiki-dark:#B392F0",[54],{"type":21,"value":55}," NUnit",{"type":16,"tag":39,"props":57,"children":59},{"style":58},"--shiki-default:#24292E;--shiki-dark:#E1E4E8",[60],{"type":21,"value":61},".",{"type":16,"tag":39,"props":63,"children":64},{"style":52},[65],{"type":21,"value":66},"Framework",{"type":16,"tag":39,"props":68,"children":69},{"style":58},[70],{"type":21,"value":71},";\n",{"type":16,"tag":39,"props":73,"children":75},{"class":41,"line":74},2,[76],{"type":16,"tag":39,"props":77,"children":79},{"emptyLinePlaceholder":78},true,[80],{"type":21,"value":81},"\n",{"type":16,"tag":39,"props":83,"children":85},{"class":41,"line":84},3,[86,91,96,100,105,109],{"type":16,"tag":39,"props":87,"children":88},{"style":46},[89],{"type":21,"value":90},"namespace",{"type":16,"tag":39,"props":92,"children":93},{"style":52},[94],{"type":21,"value":95}," maximilien",{"type":16,"tag":39,"props":97,"children":98},{"style":58},[99],{"type":21,"value":61},{"type":16,"tag":39,"props":101,"children":102},{"style":52},[103],{"type":21,"value":104},"zakowski",{"type":16,"tag":39,"props":106,"children":107},{"style":58},[108],{"type":21,"value":61},{"type":16,"tag":39,"props":110,"children":111},{"style":52},[112],{"type":21,"value":113},"Tests\n",{"type":16,"tag":39,"props":115,"children":117},{"class":41,"line":116},4,[118],{"type":16,"tag":39,"props":119,"children":120},{"style":58},[121],{"type":21,"value":122},"{\n",{"type":16,"tag":39,"props":124,"children":126},{"class":41,"line":125},5,[127,132,137],{"type":16,"tag":39,"props":128,"children":129},{"style":46},[130],{"type":21,"value":131},"    public",{"type":16,"tag":39,"props":133,"children":134},{"style":46},[135],{"type":21,"value":136}," class",{"type":16,"tag":39,"props":138,"children":139},{"style":52},[140],{"type":21,"value":141}," Tests\n",{"type":16,"tag":39,"props":143,"children":145},{"class":41,"line":144},6,[146],{"type":16,"tag":39,"props":147,"children":148},{"style":58},[149],{"type":21,"value":150},"    {\n",{"type":16,"tag":39,"props":152,"children":154},{"class":41,"line":153},7,[155,160,165,170],{"type":16,"tag":39,"props":156,"children":157},{"style":46},[158],{"type":21,"value":159},"        private",{"type":16,"tag":39,"props":161,"children":162},{"style":52},[163],{"type":21,"value":164}," Library",{"type":16,"tag":39,"props":166,"children":167},{"style":52},[168],{"type":21,"value":169}," BuildTested",{"type":16,"tag":39,"props":171,"children":172},{"style":58},[173],{"type":21,"value":174},"()\n",{"type":16,"tag":39,"props":176,"children":178},{"class":41,"line":177},8,[179],{"type":16,"tag":39,"props":180,"children":181},{"style":58},[182],{"type":21,"value":183},"        {\n",{"type":16,"tag":39,"props":185,"children":187},{"class":41,"line":186},9,[188,193,198,203],{"type":16,"tag":39,"props":189,"children":190},{"style":46},[191],{"type":21,"value":192},"            return",{"type":16,"tag":39,"props":194,"children":195},{"style":46},[196],{"type":21,"value":197}," new",{"type":16,"tag":39,"props":199,"children":200},{"style":52},[201],{"type":21,"value":202}," ParenthesesBracketsPatternTester",{"type":16,"tag":39,"props":204,"children":205},{"style":58},[206],{"type":21,"value":207},"();\n",{"type":16,"tag":39,"props":209,"children":211},{"class":41,"line":210},10,[212],{"type":16,"tag":39,"props":213,"children":214},{"style":58},[215],{"type":21,"value":216},"        }\n",{"type":16,"tag":39,"props":218,"children":220},{"class":41,"line":219},11,[221],{"type":16,"tag":39,"props":222,"children":223},{"emptyLinePlaceholder":78},[224],{"type":21,"value":81},{"type":16,"tag":39,"props":226,"children":228},{"class":41,"line":227},12,[229,234,239,244,250],{"type":16,"tag":39,"props":230,"children":231},{"style":58},[232],{"type":21,"value":233},"        [",{"type":16,"tag":39,"props":235,"children":236},{"style":52},[237],{"type":21,"value":238},"TestCase",{"type":16,"tag":39,"props":240,"children":241},{"style":58},[242],{"type":21,"value":243},"(",{"type":16,"tag":39,"props":245,"children":247},{"style":246},"--shiki-default:#032F62;--shiki-dark:#9ECBFF",[248],{"type":21,"value":249},"\"()\"",{"type":16,"tag":39,"props":251,"children":252},{"style":58},[253],{"type":21,"value":254},")]\n",{"type":16,"tag":39,"props":256,"children":258},{"class":41,"line":257},13,[259,263,267,271,276],{"type":16,"tag":39,"props":260,"children":261},{"style":58},[262],{"type":21,"value":233},{"type":16,"tag":39,"props":264,"children":265},{"style":52},[266],{"type":21,"value":238},{"type":16,"tag":39,"props":268,"children":269},{"style":58},[270],{"type":21,"value":243},{"type":16,"tag":39,"props":272,"children":273},{"style":246},[274],{"type":21,"value":275},"\"[]\"",{"type":16,"tag":39,"props":277,"children":278},{"style":58},[279],{"type":21,"value":254},{"type":16,"tag":39,"props":281,"children":283},{"class":41,"line":282},14,[284,288,292,296,301],{"type":16,"tag":39,"props":285,"children":286},{"style":58},[287],{"type":21,"value":233},{"type":16,"tag":39,"props":289,"children":290},{"style":52},[291],{"type":21,"value":238},{"type":16,"tag":39,"props":293,"children":294},{"style":58},[295],{"type":21,"value":243},{"type":16,"tag":39,"props":297,"children":298},{"style":246},[299],{"type":21,"value":300},"\"[()]\"",{"type":16,"tag":39,"props":302,"children":303},{"style":58},[304],{"type":21,"value":254},{"type":16,"tag":39,"props":306,"children":308},{"class":41,"line":307},15,[309,313,317,321,326],{"type":16,"tag":39,"props":310,"children":311},{"style":58},[312],{"type":21,"value":233},{"type":16,"tag":39,"props":314,"children":315},{"style":52},[316],{"type":21,"value":238},{"type":16,"tag":39,"props":318,"children":319},{"style":58},[320],{"type":21,"value":243},{"type":16,"tag":39,"props":322,"children":323},{"style":246},[324],{"type":21,"value":325},"\"[[()]]\"",{"type":16,"tag":39,"props":327,"children":328},{"style":58},[329],{"type":21,"value":254},{"type":16,"tag":39,"props":331,"children":333},{"class":41,"line":332},16,[334,338,342,346,351],{"type":16,"tag":39,"props":335,"children":336},{"style":58},[337],{"type":21,"value":233},{"type":16,"tag":39,"props":339,"children":340},{"style":52},[341],{"type":21,"value":238},{"type":16,"tag":39,"props":343,"children":344},{"style":58},[345],{"type":21,"value":243},{"type":16,"tag":39,"props":347,"children":348},{"style":246},[349],{"type":21,"value":350},"\"[()[]]\"",{"type":16,"tag":39,"props":352,"children":353},{"style":58},[354],{"type":21,"value":254},{"type":16,"tag":39,"props":356,"children":358},{"class":41,"line":357},17,[359,363,367,371,376],{"type":16,"tag":39,"props":360,"children":361},{"style":58},[362],{"type":21,"value":233},{"type":16,"tag":39,"props":364,"children":365},{"style":52},[366],{"type":21,"value":238},{"type":16,"tag":39,"props":368,"children":369},{"style":58},[370],{"type":21,"value":243},{"type":16,"tag":39,"props":372,"children":373},{"style":246},[374],{"type":21,"value":375},"\"([()[]])\"",{"type":16,"tag":39,"props":377,"children":378},{"style":58},[379],{"type":21,"value":254},{"type":16,"tag":39,"props":381,"children":383},{"class":41,"line":382},18,[384,389,394,399,403,408,413],{"type":16,"tag":39,"props":385,"children":386},{"style":46},[387],{"type":21,"value":388},"        public",{"type":16,"tag":39,"props":390,"children":391},{"style":46},[392],{"type":21,"value":393}," void",{"type":16,"tag":39,"props":395,"children":396},{"style":52},[397],{"type":21,"value":398}," Test1",{"type":16,"tag":39,"props":400,"children":401},{"style":58},[402],{"type":21,"value":243},{"type":16,"tag":39,"props":404,"children":405},{"style":46},[406],{"type":21,"value":407},"string",{"type":16,"tag":39,"props":409,"children":410},{"style":52},[411],{"type":21,"value":412}," validated",{"type":16,"tag":39,"props":414,"children":415},{"style":58},[416],{"type":21,"value":417},")\n",{"type":16,"tag":39,"props":419,"children":421},{"class":41,"line":420},19,[422],{"type":16,"tag":39,"props":423,"children":424},{"style":58},[425],{"type":21,"value":183},{"type":16,"tag":39,"props":427,"children":429},{"class":41,"line":428},20,[430,435,440,445,449],{"type":16,"tag":39,"props":431,"children":432},{"style":46},[433],{"type":21,"value":434},"            var",{"type":16,"tag":39,"props":436,"children":437},{"style":52},[438],{"type":21,"value":439}," tested",{"type":16,"tag":39,"props":441,"children":442},{"style":46},[443],{"type":21,"value":444}," =",{"type":16,"tag":39,"props":446,"children":447},{"style":52},[448],{"type":21,"value":169},{"type":16,"tag":39,"props":450,"children":451},{"style":58},[452],{"type":21,"value":207},{"type":16,"tag":39,"props":454,"children":456},{"class":41,"line":455},21,[457,462,467,472,477],{"type":16,"tag":39,"props":458,"children":459},{"style":58},[460],{"type":21,"value":461},"            Assert.",{"type":16,"tag":39,"props":463,"children":464},{"style":52},[465],{"type":21,"value":466},"IsTrue",{"type":16,"tag":39,"props":468,"children":469},{"style":58},[470],{"type":21,"value":471},"(tested.",{"type":16,"tag":39,"props":473,"children":474},{"style":52},[475],{"type":21,"value":476},"IsValid",{"type":16,"tag":39,"props":478,"children":479},{"style":58},[480],{"type":21,"value":481},"(validated));\n",{"type":16,"tag":39,"props":483,"children":485},{"class":41,"line":484},22,[486],{"type":16,"tag":39,"props":487,"children":488},{"style":58},[489],{"type":21,"value":216},{"type":16,"tag":39,"props":491,"children":493},{"class":41,"line":492},23,[494],{"type":16,"tag":39,"props":495,"children":496},{"style":58},[497],{"type":21,"value":498},"    }\n",{"type":16,"tag":39,"props":500,"children":502},{"class":41,"line":501},24,[503],{"type":16,"tag":39,"props":504,"children":505},{"style":58},[506],{"type":21,"value":507},"}\n",{"type":16,"tag":17,"props":509,"children":510},{},[511],{"type":21,"value":512},"The solution to this problems is the regex Pattern recursion :",{"type":16,"tag":17,"props":514,"children":515},{},[516,518],{"type":21,"value":517},"Source: ",{"type":16,"tag":519,"props":520,"children":524},"a",{"href":521,"rel":522},"https:\u002F\u002Fwww.regular-expressions.info\u002Frefrecurse.html",[523],"nofollow",[525],{"type":21,"value":521},{"type":16,"tag":17,"props":527,"children":528},{},[529],{"type":21,"value":530},"The solution underneath :",{"type":16,"tag":29,"props":532,"children":534},{"className":31,"code":533,"language":8,"meta":10,"style":10},"using System.Text.RegularExpressions;\n\nnamespace maximilien.zakowski\n{\n    public class ParenthesesBracketsPatternTester\n    {\n        public bool IsValid(string validated)\n        {\n            var regex = new Regex(\"(?'group'(\\\\(\\\\)|\\\\[\\\\]))((?'group')|(\\\\((?'group')\\\\))|(\\\\[(?'group')\\\\]))\");\n            return regex.IsMatch(validated);\n        }\n    }\n}\n",[535],{"type":16,"tag":35,"props":536,"children":537},{"__ignoreMap":10},[538,572,579,599,606,622,629,662,669,781,803,810,817],{"type":16,"tag":39,"props":539,"children":540},{"class":41,"line":42},[541,545,550,554,559,563,568],{"type":16,"tag":39,"props":542,"children":543},{"style":46},[544],{"type":21,"value":49},{"type":16,"tag":39,"props":546,"children":547},{"style":52},[548],{"type":21,"value":549}," System",{"type":16,"tag":39,"props":551,"children":552},{"style":58},[553],{"type":21,"value":61},{"type":16,"tag":39,"props":555,"children":556},{"style":52},[557],{"type":21,"value":558},"Text",{"type":16,"tag":39,"props":560,"children":561},{"style":58},[562],{"type":21,"value":61},{"type":16,"tag":39,"props":564,"children":565},{"style":52},[566],{"type":21,"value":567},"RegularExpressions",{"type":16,"tag":39,"props":569,"children":570},{"style":58},[571],{"type":21,"value":71},{"type":16,"tag":39,"props":573,"children":574},{"class":41,"line":74},[575],{"type":16,"tag":39,"props":576,"children":577},{"emptyLinePlaceholder":78},[578],{"type":21,"value":81},{"type":16,"tag":39,"props":580,"children":581},{"class":41,"line":84},[582,586,590,594],{"type":16,"tag":39,"props":583,"children":584},{"style":46},[585],{"type":21,"value":90},{"type":16,"tag":39,"props":587,"children":588},{"style":52},[589],{"type":21,"value":95},{"type":16,"tag":39,"props":591,"children":592},{"style":58},[593],{"type":21,"value":61},{"type":16,"tag":39,"props":595,"children":596},{"style":52},[597],{"type":21,"value":598},"zakowski\n",{"type":16,"tag":39,"props":600,"children":601},{"class":41,"line":116},[602],{"type":16,"tag":39,"props":603,"children":604},{"style":58},[605],{"type":21,"value":122},{"type":16,"tag":39,"props":607,"children":608},{"class":41,"line":125},[609,613,617],{"type":16,"tag":39,"props":610,"children":611},{"style":46},[612],{"type":21,"value":131},{"type":16,"tag":39,"props":614,"children":615},{"style":46},[616],{"type":21,"value":136},{"type":16,"tag":39,"props":618,"children":619},{"style":52},[620],{"type":21,"value":621}," ParenthesesBracketsPatternTester\n",{"type":16,"tag":39,"props":623,"children":624},{"class":41,"line":144},[625],{"type":16,"tag":39,"props":626,"children":627},{"style":58},[628],{"type":21,"value":150},{"type":16,"tag":39,"props":630,"children":631},{"class":41,"line":153},[632,636,641,646,650,654,658],{"type":16,"tag":39,"props":633,"children":634},{"style":46},[635],{"type":21,"value":388},{"type":16,"tag":39,"props":637,"children":638},{"style":46},[639],{"type":21,"value":640}," bool",{"type":16,"tag":39,"props":642,"children":643},{"style":52},[644],{"type":21,"value":645}," IsValid",{"type":16,"tag":39,"props":647,"children":648},{"style":58},[649],{"type":21,"value":243},{"type":16,"tag":39,"props":651,"children":652},{"style":46},[653],{"type":21,"value":407},{"type":16,"tag":39,"props":655,"children":656},{"style":52},[657],{"type":21,"value":412},{"type":16,"tag":39,"props":659,"children":660},{"style":58},[661],{"type":21,"value":417},{"type":16,"tag":39,"props":663,"children":664},{"class":41,"line":177},[665],{"type":16,"tag":39,"props":666,"children":667},{"style":58},[668],{"type":21,"value":183},{"type":16,"tag":39,"props":670,"children":671},{"class":41,"line":186},[672,676,681,685,689,694,698,703,709,713,717,722,726,731,735,740,744,749,753,758,762,767,771,776],{"type":16,"tag":39,"props":673,"children":674},{"style":46},[675],{"type":21,"value":434},{"type":16,"tag":39,"props":677,"children":678},{"style":52},[679],{"type":21,"value":680}," regex",{"type":16,"tag":39,"props":682,"children":683},{"style":46},[684],{"type":21,"value":444},{"type":16,"tag":39,"props":686,"children":687},{"style":46},[688],{"type":21,"value":197},{"type":16,"tag":39,"props":690,"children":691},{"style":52},[692],{"type":21,"value":693}," Regex",{"type":16,"tag":39,"props":695,"children":696},{"style":58},[697],{"type":21,"value":243},{"type":16,"tag":39,"props":699,"children":700},{"style":246},[701],{"type":21,"value":702},"\"(?'group'(",{"type":16,"tag":39,"props":704,"children":706},{"style":705},"--shiki-default:#005CC5;--shiki-dark:#79B8FF",[707],{"type":21,"value":708},"\\\\",{"type":16,"tag":39,"props":710,"children":711},{"style":246},[712],{"type":21,"value":243},{"type":16,"tag":39,"props":714,"children":715},{"style":705},[716],{"type":21,"value":708},{"type":16,"tag":39,"props":718,"children":719},{"style":246},[720],{"type":21,"value":721},")|",{"type":16,"tag":39,"props":723,"children":724},{"style":705},[725],{"type":21,"value":708},{"type":16,"tag":39,"props":727,"children":728},{"style":246},[729],{"type":21,"value":730},"[",{"type":16,"tag":39,"props":732,"children":733},{"style":705},[734],{"type":21,"value":708},{"type":16,"tag":39,"props":736,"children":737},{"style":246},[738],{"type":21,"value":739},"]))((?'group')|(",{"type":16,"tag":39,"props":741,"children":742},{"style":705},[743],{"type":21,"value":708},{"type":16,"tag":39,"props":745,"children":746},{"style":246},[747],{"type":21,"value":748},"((?'group')",{"type":16,"tag":39,"props":750,"children":751},{"style":705},[752],{"type":21,"value":708},{"type":16,"tag":39,"props":754,"children":755},{"style":246},[756],{"type":21,"value":757},"))|(",{"type":16,"tag":39,"props":759,"children":760},{"style":705},[761],{"type":21,"value":708},{"type":16,"tag":39,"props":763,"children":764},{"style":246},[765],{"type":21,"value":766},"[(?'group')",{"type":16,"tag":39,"props":768,"children":769},{"style":705},[770],{"type":21,"value":708},{"type":16,"tag":39,"props":772,"children":773},{"style":246},[774],{"type":21,"value":775},"]))\"",{"type":16,"tag":39,"props":777,"children":778},{"style":58},[779],{"type":21,"value":780},");\n",{"type":16,"tag":39,"props":782,"children":783},{"class":41,"line":210},[784,788,793,798],{"type":16,"tag":39,"props":785,"children":786},{"style":46},[787],{"type":21,"value":192},{"type":16,"tag":39,"props":789,"children":790},{"style":58},[791],{"type":21,"value":792}," regex.",{"type":16,"tag":39,"props":794,"children":795},{"style":52},[796],{"type":21,"value":797},"IsMatch",{"type":16,"tag":39,"props":799,"children":800},{"style":58},[801],{"type":21,"value":802},"(validated);\n",{"type":16,"tag":39,"props":804,"children":805},{"class":41,"line":219},[806],{"type":16,"tag":39,"props":807,"children":808},{"style":58},[809],{"type":21,"value":216},{"type":16,"tag":39,"props":811,"children":812},{"class":41,"line":227},[813],{"type":16,"tag":39,"props":814,"children":815},{"style":58},[816],{"type":21,"value":498},{"type":16,"tag":39,"props":818,"children":819},{"class":41,"line":257},[820],{"type":16,"tag":39,"props":821,"children":822},{"style":58},[823],{"type":21,"value":507},{"type":16,"tag":825,"props":826,"children":827},"style",{},[828],{"type":21,"value":829},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":10,"searchDepth":74,"depth":74,"links":831},[],"markdown","content:codesnippets:csharp:regex-pattern-recursion-parentheses-brackets.md","content","codesnippets\u002Fcsharp\u002Fregex-pattern-recursion-parentheses-brackets.md","codesnippets\u002Fcsharp\u002Fregex-pattern-recursion-parentheses-brackets","md",1779013873259]