0Pricing
Java Academy · Lektion

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.compile erstellt ein wiederverwendbares, unveränderliches und thread-sicheres Pattern; matcher bindet es an eine Eingabe.
  • Escapen Sie Backslashes in Regex im Java-Quellcode als \\.
  • Flags wie CASE_INSENSITIVE und MULTILINE werden mit dem bitweisen OR-Operator kombiniert.
  • Matcher ist 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

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