Java Pattern-Klasse

In Java,PatternDie Klasse ist eine der Kernkomponenten der Funktionalität regulärer Ausdrücke; sie gehört zu derjava.util.regexdas Paket verwenden.

Ein regulärer Ausdruck ist ein leistungsstarkes Textverarbeitungswerkzeug, mit dem bestimmte Muster in Zeichenfolgen abgeglichen, gesucht und ersetzt werden.

PatternDie Hauptfunktion der Klasse besteht darin, einen regulären Ausdruck in ein Muster zu kompilieren, um später effiziente Abgleichvorgänge durchzuführen.


Einführung in reguläre Ausdrücke

Ein regulärer Ausdruck ist eine Syntax zur Beschreibung von Zeichenfolgenmustern. Durch bestimmte Symbole und Regeln können komplexe Regeln für den Zeichenfolgenabgleich definiert werden. Zum Beispiel:

  • \dEntspricht einer beliebigen Ziffer (entspricht[0-9])
  • \wEntspricht einem beliebigen Buchstaben, einer Ziffer oder einem Unterstrich (entspricht[a-zA-Z0-9_])
  • a+Entspricht einem oder mehreren aufeinanderfolgenden Buchstabena
  • ^Entspricht dem Anfang einer Zeichenfolge
  • $Entspricht dem Ende einer Zeichenfolge

Grundlegende Verwendung der Pattern-Klasse

Erstellen eines Pattern-Objekts

PatternDie Klasse hat keinen öffentlichen Konstruktor; sie muss über die statische Methode erstellt werdencompile()um eine Instanz zu erstellen:

Beispiel

import java.util.regex.Pattern;

// Den regulären Ausdruck kompilieren
Pattern pattern = Pattern.compile("a*b");

Häufige Methoden

matcher(CharSequence input)

Erstellt einMatcherObjekt, mit dem Übereinstimmungsvorgänge für eine Eingabezeichenfolge durchgeführt werden:

Beispiel

Matcher matcher = pattern.matcher("aaaab");

matches(String regex, CharSequence input)

Eine statische Methode, die direkt bestimmt, ob die Eingabezeichenfolge vollständig mit dem regulären Ausdruck übereinstimmt:

Beispiel

boolean isMatch = Pattern.matches("a*b", "aaaab"); // Gibt true zurück

split(CharSequence input)

Zerlegt die Eingabezeichenfolge gemäß dem regulären Ausdruck:

Beispiel

String[] parts = pattern.split("aaaabtest"); // Gibt ["", "test"] zurück

Flags für reguläre Ausdrücke

Beim Kompilieren eines regulären Ausdrucks können verschiedene Flags angegeben werden, um das Übereinstimmungsverhalten zu ändern:

Flag Beschreibung
Pattern.CASE_INSENSITIVE Groß-/Kleinschreibung ignorieren
Pattern.MULTILINE Mehrzeilenmodus,^und$stimmt mit dem Anfang und Ende jeder Zeile überein
Pattern.DOTALL .Stimmt mit allen Zeichen überein, einschließlich Zeilentrennzeichen
Pattern.UNICODE_CASE Aktiviert Unicode-bewusste Groß-/Kleinschreibungsfaltung

Anwendungsbeispiel:

Beispiel

// Übereinstimmung ohne Beachtung der Groß-/Kleinschreibung
Pattern pattern = Pattern.compile("a*b", Pattern.CASE_INSENSITIVE);

Praktische Anwendungen der Pattern-Klasse

Validieren des E-Mail-Formats

Beispiel

String emailRegex = "^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$";
Pattern emailPattern = Pattern.compile(emailRegex);

String email = "[email protected]";
boolean isValid = emailPattern.matcher(email).matches();

Zahlen extrahieren

Beispiel

String text = "Price: $123.45";
Pattern numberPattern = Pattern.compile("\\d+\\.?\\d*");
Matcher matcher = numberPattern.matcher(text);

if (matcher.find()) {
    String number = matcher.group(); // "123.45"
}

Zeichenketten ersetzen

Beispiel

String input = "Hallo, meine Telefonnummer ist 123-456-7890";
Pattern phonePattern = Pattern.compile("\\d{3}-\\d{3}-\\d{4}");
String output = phonePattern.matcher(input).replaceAll("[PHONE]");
// Ausgabe: "Hallo, meine Telefonnummer ist [PHONE]"

Tipps zur Leistungsoptimierung

  1. Reguläre Ausdrücke vorkompilieren: Reguläre Ausdrücke, die mehrfach verwendet werden müssen, sollten in einPatternObjekt vorkompiliert werden, anstatt sie bei jeder Verwendung neu zu kompilieren.

  2. Vermeiden Sie übermäßig komplexe reguläre Ausdrücke: Übermäßig komplexe reguläre Ausdrücke können zu Leistungseinbußen oder sogar zu Problemen mit "katastrophalem Backtracking" führen.

  3. Gruppen mit Bedacht verwenden: Nicht erfassende Gruppen(?:...)schneiden besser ab als erfassende Gruppen(...)Wenn Sie keine Inhalte erfassen müssen, verwenden Sie nicht erfassende Gruppen.


Zusammenfassung

PatternDie Klasse ist der Kern der Funktionalität für reguläre Ausdrücke von Java und bietet leistungsstarke Möglichkeiten für den Abgleich von Zeichenkettenmustern. Durch die richtige Verwendung derPatternKlasse und ihrer BegleitklasseMatcherKlasse lassen sich verschiedene Aufgaben der Zeichenkettenverarbeitung effizient erledigen. Die Beherrschung regulärer Ausdrücke und diePatternNutzung der Klasse wird die Textverarbeitungsfähigkeiten von Entwicklern erheblich verbessern.

Die folgende Tabelle listetPatterndie gängigen Methoden der Klasse auf:

Konstruktions- und Kompilierungsmethoden

Methode Beschreibung
static Pattern compile(String regex) Kompiliert den regulären Ausdruck in ein Pattern-Objekt
static Pattern compile(String regex, int flags) Kompiliert den regulären Ausdruck mit den angegebenen Flags
static boolean matches(String regex, CharSequence input) Führt einen schnellen Abgleich mit dem regulären Ausdruck durch (Kompilieren + Abgleichen)
static String quote(String s) Wandelt die Zeichenkette in ein literales Muster um (maskiert alle Sonderzeichen)

Flag-Konstanten (häufig)

Flag Beschreibung
Pattern.CASE_INSENSITIVE Übereinstimmung ohne Beachtung der Groß-/Kleinschreibung
Pattern.MULTILINE Mehrzeilenmodus (^ und $ stimmen mit Anfang und Ende von Zeilen überein)
Pattern.DOTALL Der Punkt (.) stimmt mit allen Zeichen überein, einschließlich Zeilentrennzeichen
Pattern.UNICODE_CASE Aktiviert Unicode-bewusste Groß-/Kleinschreibungsfaltung

Methoden zum Abgleichen und Aufteilen

Methode Beschreibung
Matcher matcher(CharSequence input) Erzeugt ein Matcher-Objekt
String[] split(CharSequence input) Teilt die Eingabezeichenkette mit dem Muster auf
String[] split(CharSequence input, int limit) Aufteilen mit einem Limit
Stream<String> splitAsStream(CharSequence input) Gibt den Split-Stream zurück (Java 8+)

Methoden für Musterinformationen

Methode Beschreibung
String pattern() Gibt den kompilierten regulären Ausdruck zurück
int flags() Gibt die zur Kompilierzeit festgelegten Flags zurück
String toString() Gibt die Zeichenfolgendarstellung des Musters zurück
Andere Erweiterungen