expresión regular java para extraer contenido entre corchetes

la línea de entrada está debajo

Item(s): [item1.test],[item2.qa],[item3.production] 

¿Puedes ayudarme a escribir una expresión regular de Java para extraer

 item1.test,item2.qa,item3.production 

desde la línea de entrada anterior?

Un poco más conciso:

 String in = "Item(s): [item1.test],[item2.qa],[item3.production]"; Pattern p = Pattern.compile("\\[(.*?)\\]"); Matcher m = p.matcher(in); while(m.find()) { System.out.println(m.group(1)); } 

Debe usar una anticipación positiva y mirar hacia atrás:

 (?< =\[)([^\]]+)(?=\]) 
  • (? < = [) Coincide con todo seguido de [
  • ([^]] +) Coincide con cualquier cadena que no contenga]
  • (? =]) Coincide con todo antes]

Me dividiría después de recortar basura anterior o final:

 String s = "Item(s): [item1.test], [item2.qa],[item3.production] "; String r1 = "(^.*?\\[|\\]\\s*$)", r2 = "\\]\\s*,\\s*\\["; String[] ss = s.replaceAll(r1,"").split(r2); System.out.println(Arrays.asList(ss)); // [item1.test, item2.qa, item3.production]