using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
var arg = @"(?>\w*\((?>[^()]+|(?<o>)\(|(?<-o>)\))*(?(o)(?!))\)|\w+)";
var pattern = $@"^\s*(concat)\(\s*({arg})\s*,\s*({arg})\)\s*$";
var match = Regex.Match("concat(regex(3,4),regex(3,4))", pattern);
if (match.Success)
{
Console.WriteLine(match.Groups[1].Value);
Console.WriteLine(match.Groups[2].Value);
Console.WriteLine(match.Groups[3].Value);
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLklPOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciBhcmcgPSBAIig/Plx3KlwoKD8+W14oKV0rfCg/PG8+KVwofCg/PC1vPilcKSkqKD8obykoPyEpKVwpfFx3KykiOwoJCXZhciBwYXR0ZXJuID0gJEAiXlxzKihjb25jYXQpXChccyooe2FyZ30pXHMqLFxzKih7YXJnfSlcKVxzKiQiOwoJCXZhciBtYXRjaCA9IFJlZ2V4Lk1hdGNoKCJjb25jYXQocmVnZXgoMyw0KSxyZWdleCgzLDQpKSIsIHBhdHRlcm4pOwoJCWlmIChtYXRjaC5TdWNjZXNzKSAKCQl7CgkJICAgIENvbnNvbGUuV3JpdGVMaW5lKG1hdGNoLkdyb3Vwc1sxXS5WYWx1ZSk7CgkJICAgIENvbnNvbGUuV3JpdGVMaW5lKG1hdGNoLkdyb3Vwc1syXS5WYWx1ZSk7CgkJICAgIENvbnNvbGUuV3JpdGVMaW5lKG1hdGNoLkdyb3Vwc1szXS5WYWx1ZSk7CgkJfQoJfQp9