fork(2) download
  1. /* http://pt.stackoverflow.com/q/177044/53463 */
  2.  
  3. import java.util.regex.Matcher;
  4. import java.util.regex.Pattern;
  5.  
  6. class Ideone
  7. {
  8. public static void main (String[] args) throws java.lang.Exception
  9. {
  10. final String regex = "\\G" // Início do texto ou fim do casamento anterior
  11. + "[^\\[']*" // Texto sem colchetes nem aspas simples
  12. + "(?:'[^']*'[^\\['*]*)*" // Opcional: Texto em aspas + texto sem "[" nem "'"
  13. + "(\\[" // Grupo 1: Colchete de abertura
  14. + "[^]']*" // + texto sem "]" nem "'"
  15. + "(?:'[^']*'[^]']*)*" // + texto em aspas + texto sem "]" nem "'"
  16. + "\\])"; // + colchete de fechamento
  17. final Pattern pat = Pattern.compile(regex);
  18. Matcher mat;
  19.  
  20. final String[] entrada = {
  21. "1 + [aa]",
  22. "[bb] + 2",
  23. "'a' + [cc]",
  24. "['ola' + 'mundo']",
  25. "'[a' + 'b]'",
  26. "'[' + ']'",
  27. "[]",
  28. "'Ola [world] legal'",
  29. "Oi ['[aa]'] ola"
  30. };
  31.  
  32. //Loop cada string na entrada
  33. for (String stringlToVerify : entrada) {
  34. mat = pat.matcher(stringlToVerify);
  35. System.out.println("\nEntrada: " + stringlToVerify);
  36.  
  37. if (mat.find())
  38. do { // Loop cada texto entre colchetes casado
  39. System.out.println("Captura: " + mat.group(1));
  40. } while (mat.find());
  41. else
  42. System.out.println("Não há colchetes fora das aspas");
  43. }
  44. }
  45. }
Success #stdin #stdout 0.05s 711168KB
stdin
Standard input is empty
stdout
Entrada: 1 + [aa]
Captura: [aa]

Entrada: [bb] + 2
Captura: [bb]

Entrada: 'a' + [cc]
Captura: [cc]

Entrada: ['ola' + 'mundo']
Captura: ['ola' + 'mundo']

Entrada: '[a' + 'b]'
Não há colchetes fora das aspas

Entrada: '[' + ']'
Não há colchetes fora das aspas

Entrada: []
Captura: []

Entrada: 'Ola [world] legal'
Não há colchetes fora das aspas

Entrada: Oi ['[aa]'] ola
Captura: ['[aa]']