0Pricing
Java Academy · Lektion

Capturing Groups

Abgeglichene Teilstrings extrahieren

Capturing Groups ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Was Capturing-Gruppen sind

Klammern ( ) in einer Regex erstellen Capturing-Gruppen. Nach einer Übereinstimmung können Sie den Text jeder Gruppe einzeln extrahieren – ideal zum Parsen strukturierter Daten.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("(\\d+)-(\\d+)").matcher("42-99");
        if (m.find()) {
            System.out.println(m.group(1));
            System.out.println(m.group(2));
        }
    }
}

Gruppe 0 ist die gesamte Übereinstimmung

group(0) (oder group()) gibt den gesamten übereinstimmenden Text zurück. Nummerierte Gruppen beginnen bei 1.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("(\\d+)px").matcher("width: 24px");
        if (m.find()) {
            System.out.println(m.group(0));
            System.out.println(m.group(1));
        }
    }
}

Gruppen zählen

groupCount() gibt die Anzahl der Capturing-Gruppen im Pattern zurück, wobei Gruppe 0 nicht mitgezählt wird.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2})").matcher("2026-05-30");
        if (m.find()) System.out.println(m.groupCount());
    }
}

Ein Datum parsen

Mit Capturing-Gruppen lässt sich ein formatierter Wert leicht in einzelne Bestandteile zerlegen.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2})").matcher("2026-05-30");
        if (m.matches()) {
            System.out.println("year=" + m.group(1));
            System.out.println("month=" + m.group(2));
            System.out.println("day=" + m.group(3));
        }
    }
}

Benannte Gruppen

Benennen Sie eine Gruppe mit (?<name>...) und rufen Sie sie über ihren Namen ab. Dadurch werden Patterns deutlich lesbarer.

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

public class Main {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("(?<user>\\w+)@(?<host>\\w+\\.\\w+)");
        Matcher m = p.matcher("alice@example.com");
        if (m.find()) {
            System.out.println(m.group("user"));
            System.out.println(m.group("host"));
        }
    }
}

Grenzen von Gruppen

start(n) und end(n) geben den Indexbereich einer bestimmten Gruppe innerhalb der Eingabe an.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("(\\d+)").matcher("abc123");
        if (m.find()) {
            System.out.println(m.start(1) + " to " + m.end(1));
        }
    }
}

Nicht erfassende Gruppen

Verwenden Sie (?:...), um für Alternativen oder Quantifizierer zu gruppieren, ohne eine nummerierte Capturing-Gruppe zu erstellen. So bleiben die Gruppennummern aussagekräftig.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("(?:Mr|Ms)\\.? (\\w+)").matcher("Ms. Smith");
        if (m.find()) System.out.println(m.group(1));
    }
}

Optionale Gruppen können null sein

Wenn eine Gruppe optional ist und nicht an der Übereinstimmung beteiligt war, gibt group(n) null zurück. Behandeln Sie diesen Fall immer.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("(\\d+)(px)?").matcher("50");
        if (m.matches()) {
            System.out.println(m.group(1));
            System.out.println(m.group(2));
        }
    }
}

Übereinstimmungen mit Gruppen durchlaufen

Kombinieren Sie find in einer Schleife mit der Extraktion von Gruppen, um strukturierte Tokens aus einem größeren Text zu extrahieren.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("(\\w+)=(\\d+)").matcher("a=1 b=2 c=3");
        while (m.find()) {
            System.out.println(m.group(1) + " -> " + m.group(2));
        }
    }
}

Backreferences im Pattern

Innerhalb einer Regex findet \1 denselben Text, den eine vorherige Gruppe erfasst hat. Damit lässt sich eine Wiederholung erkennen, etwa ein doppelt vorkommendes Wort.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("(\\w+) \\1").matcher("the the cat");
        System.out.println(m.find());
        System.out.println(m.group(1));
    }
}

In Records erfassen

Ein übersichtliches Vorgehen: Übereinstimmung finden, Gruppen extrahieren und ein kleines Objekt erstellen. Hier verwenden wir einen Record.

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

public class Main {
    record Point(int x, int y) {}

    public static void main(String[] args) {
        Matcher m = Pattern.compile("\\((\\d+),(\\d+)\\)").matcher("(3,7)");
        if (m.matches()) {
            Point p = new Point(Integer.parseInt(m.group(1)), Integer.parseInt(m.group(2)));
            System.out.println(p);
        }
    }
}

Kurze Überprüfung

Was gibt group(0) nach einer erfolgreichen Übereinstimmung zurück?

Zusammenfassung

Sie haben übereinstimmende Teilstrings extrahiert:

  • Klammern erstellen nummerierte Gruppen. group(0) ist die gesamte Übereinstimmung, 1 und höher sind Capturing-Gruppen.
  • (?<name>...) erstellt benannte Gruppen, die über group("name") gelesen werden.
  • (?:...) gruppiert, ohne Text zu erfassen.
  • Optionale Gruppen können null sein; \1 verweist per Backreference auf eine vorherige Gruppe.

Häufig gestellte Fragen

Ist die Lektion „Capturing Groups“ kostenlos?

Ja — der vollständige Text von „Capturing Groups“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Capturing Groups“?

Abgeglichene Teilstrings extrahieren Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Java Academy zu starten?

Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Capturing Groups“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?

Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Patterns kompilieren
  2. Suchen und Abgleichen
  3. Capturing Groups
  4. Ersetzen mit Regex
← Zurück zu Java Academy