import java.util.*;
import java.io.*;
import java.util.regex.*;
import java.util.List;
class Program {
String subject
= "a, b, c, search:(1, 2, 3), d"; Pattern regex = Pattern.compile("\\([^)]*\\)|(\\s*,\\s*)");
Matcher m = regex.matcher(subject);
while (m.find()) {
if(m.group(1) != null) m.appendReplacement(b, "SplitHere");
else m.appendReplacement(b, m.group(0));
}
m.appendTail(b);
String replaced
= b.
toString(); String[] splits
= replaced.
split("SplitHere"); } // end main
} // end Program
ICAgIGltcG9ydCBqYXZhLnV0aWwuKjsKICAgIGltcG9ydCBqYXZhLmlvLio7CiAgICBpbXBvcnQgamF2YS51dGlsLnJlZ2V4Lio7CiAgICBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAgICAgCiAgICBjbGFzcyBQcm9ncmFtIHsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgl7CiAgICAgCiAgICBTdHJpbmcgc3ViamVjdCA9ICJhLCBiLCBjLCBzZWFyY2g6KDEsIDIsIDMpLCBkIjsKICAgIFBhdHRlcm4gcmVnZXggPSBQYXR0ZXJuLmNvbXBpbGUoIlxcKFteKV0qXFwpfChcXHMqLFxccyopIik7CiAgICBNYXRjaGVyIG0gPSByZWdleC5tYXRjaGVyKHN1YmplY3QpOwogICAgU3RyaW5nQnVmZmVyIGI9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHdoaWxlIChtLmZpbmQoKSkgewogICAgaWYobS5ncm91cCgxKSAhPSBudWxsKSBtLmFwcGVuZFJlcGxhY2VtZW50KGIsICJTcGxpdEhlcmUiKTsKICAgIGVsc2UgbS5hcHBlbmRSZXBsYWNlbWVudChiLCBtLmdyb3VwKDApKTsKICAgIH0KICAgIG0uYXBwZW5kVGFpbChiKTsKICAgIFN0cmluZyByZXBsYWNlZCA9IGIudG9TdHJpbmcoKTsKICAgIFN0cmluZ1tdIHNwbGl0cyA9IHJlcGxhY2VkLnNwbGl0KCJTcGxpdEhlcmUiKTsKICAgIGZvciAoU3RyaW5nIHNwbGl0IDogc3BsaXRzKSBTeXN0ZW0ub3V0LnByaW50bG4oc3BsaXQpOwogICAgfSAvLyBlbmQgbWFpbgogICAgfSAvLyBlbmQgUHJvZ3JhbQ==