Grupos de captura de regex de Java

Estoy tratando de entender este bloque de código. En el primero, ¿qué es lo que buscamos en la expresión?

Entiendo que es cualquier carácter (0 o más veces *) seguido de cualquier número entre 0 y 9 (una o más veces +) seguido de cualquier carácter (0 o más veces *).

Cuando esto se ejecuta el resultado es:

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0

¿Podría alguien pasar por esto conmigo?

¿Cuál es la ventaja de usar grupos de captura?

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexTut3 {

    public static void main(String args[]) {
        String line = "This order was placed for QT3000! OK?"; 
        String pattern = "(.*)(\\d+)(.*)";

        // Create a Pattern object
        Pattern r = Pattern.compile(pattern);

        // Now create matcher object.
        Matcher m = r.matcher(line);

        if (m.find()) {
            System.out.println("Found value: " + m.group(0));
            System.out.println("Found value: " + m.group(1));
            System.out.println("Found value: " + m.group(2));
        } else {
            System.out.println("NO MATCH");
        }
    }

}

Respuestas a la pregunta(4)

Su respuesta a la pregunta