Expressões Regulares - Capturar grupos que não bateram

Ao analisar uma String através de expressões regulares, é possível identificar quais grupos da regra não bateram? Abaixo um pequeno exemplo:

public static void main(String[] args) {

        Pattern p = Pattern.compile("(.{3})\\t+(.{3})\\t+(.{3})");

        String texto = "xxx\txxx\txxx"; //String correta

	String texto2 = "xxx\txx\txxx"; //Erro no segundo grupo

	

	Matcher m = p.matcher(texto);

	if (m.matches()) {
		System.out.println("OK");
	} else {
		System.out.println("Erro");
	}

	m = p.matcher(texto2);
	if (m.matches()) {
		System.out.println("OK");
	} else {
		System.out.println("Erro");
		//CAPTURAR GRUPOS QUE NÃO BATERAM*
	}
}

CAPTURAR GRUPOS QUE NÃO BATERAM

// Aqui eu gostaria de conseguir capturar que o
// “erro” foi ocasionado por conta do segundo campo não ter “batido”.
// Se for possível, posso capturar múltiplos erros? Imagina que
// tenho uma String com “xx\txx\txxx”
// onde o primeiro campo E o segundo não estão corretos, possuem
// somente dois caracteres ao invés de três
// Poderia ser capturada a informação de que os campos 1 e 2 não
// bateram?

Use o split e compare cada parte

String[] partes = texto.split("\t");
if (partes.length == 3) {
  if (partes[0].matches(".{3}")) { // ou partes[0].length == 3
    System.out.println("parte 0 OK");
  } else {
    System.out.println("parte 0 ERRO");
  }
}
1 curtida

diego12, obrigado pela ajuda.
Desta forma está muito estática a solução, o tamanho dos campos e o valor de cada um podem ser dinâmicos, mas me deu uma boa ideia e acho que vou conseguir adaptar a solução.