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 übergroup("name")gelesen werden.(?:...)gruppiert, ohne Text zu erfassen.- Optionale Gruppen können
nullsein;\1verweist 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
- Patterns kompilieren
- Suchen und Abgleichen
- Capturing Groups
- Ersetzen mit Regex