¿Cómo hacer coincidir la cadena entre paréntesis (anidados) en Java?

Me gustaría hacer coincidir una cadena entre paréntesis como:

(i, j, k(1))
^^^^^^^^^^^^

La cadena también puede contener paréntesis cerrados. Cómo hacerlo coincidir con la expresión regular en Java sin escribir un analizador, ya que es una pequeña parte de mi proyecto. ¡Gracias!

Editar:

Quiero buscar un bloque de cadena y encontrar algo comou(i, j, k), u(i, j, k(1)) o solou(<anything within this paired parens>), y reemplazarlos a__u%array(i, j, k) y__u%array(i, j, k(1)) para mi aplicación de traducción Fortran.

Respuestas a la pregunta(3)

Su respuesta a la pregunta