Paul, resucitar a esta pregunta porque tenía una solución simple que no era mencionado. (Encontró su pregunta mientras investigaba un regex bounty quest.)
También la solución existente comprueba que la coma no vaya seguida por un paréntesis, pero eso no garantiza que esté incrustado entre paréntesis.
La expresión regular es muy simple:
\(.*?\)|(,)
El lado izquierdo de la alternancia coincide con juego completo de paréntesis. Ignoraremos estos partidos. El lado derecho coincide y captura las comas en el Grupo 1, y sabemos que son las comas correctas porque no coinciden con la expresión de la izquierda.
En este demo, puede ver las capturas del Grupo 1 en el panel inferior derecho.
Dijiste que quieres hacer coincidir las comas, pero puedes usar la misma idea general para dividir o reemplazar.
Para hacer coincidir las comas, debe inspeccionar el Grupo 1. El único objetivo de este programa completo en la vida es hacer justamente eso.
import java.util.*;
import java.io.*;
import java.util.regex.*;
import java.util.List;
class Program {
public static void main (String[] args) throws java.lang.Exception {
String subject = "12,44,foo,bar,(23,45,200),6";
Pattern regex = Pattern.compile("\\(.*?\\)|(,)");
Matcher regexMatcher = regex.matcher(subject);
List<String> group1Caps = new ArrayList<String>();
// put Group 1 captures in a list
while (regexMatcher.find()) {
if(regexMatcher.group(1) != null) {
group1Caps.add(regexMatcher.group(1));
}
} // end of building the list
// What are all the matches?
System.out.println("\n" + "*** Matches ***");
if(group1Caps.size()>0) {
for (String match : group1Caps) System.out.println(match);
}
} // end main
} // end Program
Aquí es una live demo
Para utilizar la misma técnica para la división o sustitución, ver los ejemplos de código en el artículo en la referencia.
Referencia
- How to match pattern except in situations s1, s2, s3
- How to match a pattern unless...
¿Puede haber paréntesis anidados? ¿Puede haber más de un par? – Nikodemus
¿Puede la cadena tener paréntesis sin igual como '" 12,44,12) foo, barra, (23,45,200), 6 "'? – anubhava