using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
var re = @"(?x) # ignore spaces and comments
(?=
(
\( # first (
(?:
(?<open> \( )* # open++
[^()]+
(?<-open> \) )* # open--
)+
\) # last )
(?(open)(?!)) # fail if unblanaced: open > 0
)
)
\( # eat a (, to advance the match a char";
var str = "a + ((b + (c + d)) + (e + f)) + (x + ((y) + (z)) + x)";
var m = Regex.Matches(str, re);
Console.WriteLine("Matched: ");
foreach (Match i in m)
Console.WriteLine(i.Groups[1]);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGV4dC5SZWd1bGFyRXhwcmVzc2lvbnM7CgpwdWJsaWMgY2xhc3MgRXhhbXBsZQp7CiAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKICAgewogICAgICB2YXIgcmUgPSBAIig/eCkgICMgaWdub3JlIHNwYWNlcyBhbmQgY29tbWVudHMKKD89CiAgKAogICAgXCggICAgICAgICAgICAgICAgICMgZmlyc3QgKAogICAgKD86CiAgICAgICg/PG9wZW4+IFwoICkqICAgIyBvcGVuKysKICAgICAgW14oKV0rCiAgICAgICg/PC1vcGVuPiBcKSApKiAgIyBvcGVuLS0KICAgICkrCiAgICBcKSAgICAgICAgICAgICAgICAgIyBsYXN0ICkKICAgICg/KG9wZW4pKD8hKSkgICAgICAjIGZhaWwgaWYgdW5ibGFuYWNlZDogb3BlbiA+IDAKICApCikKXCggICAgICAgICAgICAgICAgICAgICAjIGVhdCBhICgsIHRvIGFkdmFuY2UgdGhlIG1hdGNoIGEgY2hhciI7CgogICAgICB2YXIgc3RyID0gImEgKyAoKGIgKyAoYyArIGQpKSArIChlICsgZikpICsgKHggKyAoKHkpICsgKHopKSArIHgpIjsKCiAgICAgIHZhciBtID0gUmVnZXguTWF0Y2hlcyhzdHIsIHJlKTsKCiAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJNYXRjaGVkOiAiKTsKICAgICAgZm9yZWFjaCAoTWF0Y2ggaSBpbiBtKQogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKGkuR3JvdXBzWzFdKTsKICAgfQp9