Reguläre Ausdrücke in Java: Vollständige Anleitung mit Code-Beispielen
Reguläre Ausdrücke (regex) sind ein leistungsstarkes Werkzeug zum Suchen, Extrahieren und Ersetzen von Text nach einem Muster. In Java wird die Arbeit mit regulären Ausdrücken über zwei Hauptklassen realisiert: java.util.regex.Pattern (Kompilierung des Musters) und java.util.regex.Matcher (Ausführung der Suche). In diesem Artikel werden wir die Syntax, die wichtigsten Methoden und praktische Beispiele durchgehen, die Ihnen helfen, regex sicher in realen Projekten einzusetzen.
1. Grundlagen der Arbeit mit regulären Ausdrücken in Java
Bevor wir zu den Beispielen übergehen, lassen Sie uns die Schlüsselklassen und ihre Interaktion durchgehen.
Die Klasse Pattern
Pattern ist eine kompilierte Darstellung eines regulären Ausdrucks. Sie wird mit der statischen Methode Pattern.compile() erstellt. Ohne Kompilierung ist die Verwendung von regex nicht möglich.
Die Klasse Matcher
Matcher ist die "Engine", die die Suche nach dem angegebenen Muster in einer Zeichenkette durchführt. Sie wird mit der Methode pattern.matcher(inputString) erstellt.
Grundlegende Syntax der Metazeichen
.— ein beliebiges Zeichen (außer Zeilenumbruch)\\d— eine Ziffer (0-9)\\w— ein Buchstabe, eine Ziffer oder ein Unterstrich\\s— ein Leerzeichen^— Anfang der Zeichenkette$— Ende der Zeichenkette*— 0 oder mehr Wiederholungen+— 1 oder mehr Wiederholungen?— 0 oder 1 Wiederholung{n,m}— von n bis m Wiederholungen[]— Zeichensatz (z.B.[a-z]— jeder Kleinbuchstabe)()— Erfassungsgruppe
Beispiel 1: Einfache Überprüfung einer Telefonnummer
import java.util.regex.*;
public class PhoneValidator { public static void main(String[] args) { String phone = "+7 (999) 123-45-67"; String regex = "^\\\\+7\\\\s\\\\(\\\\d{3}\\\\)\\\\s\\\\d{3}-\\\\d{2}-\\\\d{2}$"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(phone); if (matcher.matches()) { System.out.println("Nummer ist korrekt"); } else { System.out.println("Nummer entspricht nicht dem Format"); } }}2. Methoden von Matcher: matches(), find() und Erfassungsgruppe
Das Verständnis des Unterschieds zwischen matches() und find() ist der Schlüssel zur erfolgreichen Arbeit mit regex in Java.
matches()— prüft, ob die gesamte Zeichenkette vollständig dem Muster entspricht (fügt implizit^und$hinzu).find()— sucht nach einer Teilzeichenkette, die dem Muster entspricht, an einer beliebigen Stelle in der Zeichenkette.group()— gibt die gefundene Übereinstimmung oder den Wert der Erfassungsgruppe zurück.
Beispiel 2: Extrahieren von E-Mail-Adressen aus Text mit find() und Gruppen
import java.util.regex.*;
public class EmailExtractor { public static void main(String[] args) { String text = "Kontakte: support@example.com, info@test.org und admin@site.net."; String regex = "([a-zA-Z0-9._%+-]+)@([a-zA-Z0-9.-]+)\\\\.([a-zA-Z]{2,})"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(text); while (matcher.find()) { System.out.println("Vollständige E-Mail: " + matcher.group()); System.out.println("Benutzername: " + matcher.group(1)); System.out.println("Domain: " + matcher.group(2)); System.out.println("Zone: " + matcher.group(3)); System.out.println("---"); } }}Beispiel 3: Passwortvalidierung mit matches()
Anforderungen: 8 bis 20 Zeichen, mindestens ein Großbuchstabe, ein