Вы можете сопоставить вложенные скобки с помощью регулярных выражений до фиксированного уровня. Но более 2 уровня станут довольно грязными (2 уже есть, если честно). Это будет соответствовать вашим примерам:
\(([^()]*+|\([^()]*+\))*\)
Краткое объяснение:
\( # match a '('
( # open group 1
[^()]*+ # match any chars other than '(' and ')'
| # OR
\([^()]*+\) # match '(...)'
)* # close group 1 and repeat it zero or more times
\) # match a '('
См. Демонстрацию на ideone.com
Существуют разновидности регулярных выражений, которые могут соответствовать произвольному числу вложений (Perl, .NET, PHP), но Java не является одним из них.
Но, глядя на комментарий, который вы разместили под своим вопросом, я бы не обработал это с помощью регулярных выражений, а использовал бы правильный анализатор (будь то ручной или сгенерированный).