Patterns kompilieren
Pattern.compile und Matcher
Patterns kompilieren ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 1 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.
Das Paar aus Pattern und Matcher
Java-RegEx befindet sich in java.util.regex. Ein Pattern ist ein kompiliertes reguläres Ausdrucksmuster; ein Matcher wendet dieses Muster auf eine bestimmte Eingabe an.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main {
public static void main(String[] args) {
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("abc123");
System.out.println(m.find());
}
}Einmal kompilieren, häufig wiederverwenden
Pattern.compile ist vergleichsweise teuer. Kompilieren Sie ein Pattern einmal und verwenden Sie es für viele Eingaben wieder, statt es in einer Schleife erneut zu kompilieren.
import java.util.regex.Pattern;
public class Main {
static final Pattern DIGITS = Pattern.compile("\\d+");
public static void main(String[] args) {
System.out.println(DIGITS.matcher("a1").find());
System.out.println(DIGITS.matcher("bb").find());
}
}Backslashes in Java escapen
Regex-Tokens wie \d benötigen einen Backslash, aber auch Java-Strings verwenden Backslashes für Escape-Sequenzen. Im Quellcode schreiben Sie daher \\d, um die Regex \d zu erhalten.
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern word = Pattern.compile("\\w+");
System.out.println(word.matcher("hello").matches());
}
}Einen Matcher erstellen
pattern.matcher(input) bindet das Pattern an einen Eingabestring und gibt einen neuen Matcher zurück, der die Position verfolgt.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main {
public static void main(String[] args) {
Pattern p = Pattern.compile("cat");
Matcher m = p.matcher("the cat sat");
System.out.println(m.find());
}
}Matcher sind zustandsbehaftet
Ein Matcher enthält veränderlichen Zustand (aktuelle Position, letzter Treffer). Erstellen Sie für jede Eingabe einen neuen Matcher; verwenden Sie denselben Matcher nicht in mehreren Threads.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main {
public static void main(String[] args) {
Pattern p = Pattern.compile("\\d");
Matcher m = p.matcher("a1b2");
System.out.println(m.find());
System.out.println(m.find());
}
}Flag für Groß-/Kleinschreibung
Übergeben Sie Flags als zweites Argument an compile. Pattern.CASE_INSENSITIVE ignoriert die Groß- und Kleinschreibung.
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
System.out.println(p.matcher("I love JAVA").find());
}
}Flags kombinieren
Kombinieren Sie Flags mit dem bitweisen OR-Operator. Hier fügen wir MULTILINE hinzu, damit Anker in jeder Zeile greifen.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main {
public static void main(String[] args) {
Pattern p = Pattern.compile("^a", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
Matcher m = p.matcher("apple\nApricot");
int count = 0;
while (m.find()) count++;
System.out.println(count);
}
}Die statische matches-Abkürzung
Pattern.matches(regex, input) ist eine praktische Einmal-Hilfsmethode, die das Pattern kompiliert und in einem einzigen Aufruf testet. Sie ist bequem, kompiliert das Pattern aber bei jedem Aufruf erneut.
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
System.out.println(Pattern.matches("\\d{3}", "123"));
System.out.println(Pattern.matches("\\d{3}", "12"));
}
}Mit einem Pattern aufteilen
Ein kompiliertes Pattern kann Strings über split aufteilen und dabei dieselbe kompilierte Regex effizient wiederverwenden.
import java.util.Arrays;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern comma = Pattern.compile("\\s*,\\s*");
String[] parts = comma.split("a, b ,c, d");
System.out.println(Arrays.toString(parts));
}
}Das Pattern untersuchen
pattern() gibt den ursprünglichen Regex-String zurück, und flags() gibt die aktiven Flags als int zurück.
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern p = Pattern.compile("[a-z]+", Pattern.CASE_INSENSITIVE);
System.out.println(p.pattern());
System.out.println(p.flags());
}
}Ungültige Patterns lösen Ausnahmen aus
Eine fehlerhafte Regex löst beim Kompilieren eine PatternSyntaxException aus, sodass Sie Fehler frühzeitig abfangen können.
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
public class Main {
public static void main(String[] args) {
try {
Pattern.compile("[unclosed");
} catch (PatternSyntaxException e) {
System.out.println("Invalid regex");
}
}
}Kurze Überprüfung
Warum sollten Sie eine häufig verwendete Regex in einem statischen Pattern-Feld kompilieren?
Zusammenfassung
Sie haben Patterns kompiliert:
Pattern.compileerstellt ein wiederverwendbares, unveränderliches und thread-sicheres Pattern;matcherbindet es an eine Eingabe.- Escapen Sie Backslashes in Regex im Java-Quellcode als
\\. - Flags wie
CASE_INSENSITIVEundMULTILINEwerden mit dem bitweisen OR-Operator kombiniert. Matcherist zustandsbehaftet. Erstellen Sie daher für jede Eingabe einen eigenen Matcher.
Häufig gestellte Fragen
Ist die Lektion „Patterns kompilieren“ kostenlos?
Ja — der vollständige Text von „Patterns kompilieren“ 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 „Patterns kompilieren“?
Pattern.compile und Matcher 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 1 von 4.
Wie lange dauert die Lektion „Patterns kompilieren“?
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