using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
var pattern = @"\bisnull\((?>[^][()]|(?<x>\[[^][]*])|(?<o>)\(|(?<-o>)\))*(?(o)(?!))\)";
var text = "isnull(Num([abc]), [a], [b]) + sum([d])";
var result = Regex.Matches(text, pattern, RegexOptions.IgnoreCase)
.Cast<Match>().Select(p => p.Groups["x"].Captures)
.ToList();
foreach (var coll in result)
foreach (var v in coll)
Console.WriteLine(v);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLklPOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewogICAgCXZhciBwYXR0ZXJuID0gQCJcYmlzbnVsbFwoKD8+W15dWygpXXwoPzx4PlxbW15dW10qXSl8KD88bz4pXCh8KD88LW8+KVwpKSooPyhvKSg/ISkpXCkiOwogICAgCXZhciB0ZXh0ID0gImlzbnVsbChOdW0oW2FiY10pLCBbYV0sIFtiXSkgKyBzdW0oW2RdKSI7CiAgICAJdmFyIHJlc3VsdCA9IFJlZ2V4Lk1hdGNoZXModGV4dCwgcGF0dGVybiwgUmVnZXhPcHRpb25zLklnbm9yZUNhc2UpCiAgICAJICAgICAgICAgIC5DYXN0PE1hdGNoPigpLlNlbGVjdChwID0+IHAuR3JvdXBzWyJ4Il0uQ2FwdHVyZXMpCiAgICAJICAgICAgICAgIC5Ub0xpc3QoKTsKICAgICAgICBmb3JlYWNoICh2YXIgY29sbCBpbiByZXN1bHQpCiAgICAgICAgICAgZm9yZWFjaCAodmFyIHYgaW4gY29sbCkKICAgICAgICAJQ29uc29sZS5Xcml0ZUxpbmUodik7Cgl9Cn0=