Reguläre Ausdrücke in Java: von der Theorie zur Praxis
\nReguläre Ausdrücke (Regex) sind ein mächtiges Werkzeug zum Suchen, Ersetzen und Validieren von Text. In Java wird die Arbeit mit ihnen über das Paket java.util.regex realisiert, das zwei Hauptklassen umfasst: Pattern (Vorlage) und Matcher (Vergleicher). In diesem Artikel analysieren wir die Syntax, die wichtigsten Methoden und festigen das Wissen anhand realer Codebeispiele.
Das Material wird sowohl für Anfänger, die gerade Java kennenlernen, als auch für erfahrene Entwickler nützlich sein, die ihr Wissen auffrischen möchten. Alle Beispiele können sofort in Ihrer IDE ausgeführt werden.
\n\n1. Grundlagen der Arbeit mit Pattern und Matcher
\nJede Arbeit mit Regex in Java beginnt mit der Kompilierung einer Vorlage über Pattern.compile(). Danach wird ein Matcher-Objekt erstellt, das die Vorlage auf eine Zeichenkette anwendet.
Betrachten wir ein einfaches Beispiel: die Suche nach allen Ziffern in einem Text.
\nimport java.util.regex.Matcher;\nimport java.util.regex.Pattern;\n\npublic class RegexDemo {\n public static void main(String[] args) {\n String text = "Java Version 21 wurde im Jahr 2023 veröffentlicht";\n String regex = "\\\\d+"; // eine oder mehrere Ziffern\n\n Pattern pattern = Pattern.compile(regex);\n Matcher matcher = pattern.matcher(text);\n\n while (matcher.find()) {\n System.out.println("Gefunden: " + matcher.group());\n }\n }\n}\nAusgabe des Programms:
\nGefunden: 21\nGefunden: 2023\nBeachten Sie den doppelten Backslash \\\\d – in Java erfordert das Zeichenfolgenliteral das Escapen des umgekehrten Schrägstrichs. Wenn im Regex \\d angegeben werden muss, schreiben wir im Code \\\\d.
2. Syntax regulärer Ausdrücke: Metazeichen und Quantoren
\nUm Regex effektiv zu nutzen, ist es wichtig, die grundlegenden Metazeichen zu kennen:
\n- \n
.– jedes beliebige Zeichen (außer Zeilenumbruch); \n \\\\d– eine Ziffer (entspricht[0-9]); \n \\\\w– Buchstabe, Ziffer oder Unterstrich ([a-zA-Z0-9_]); \n \\\\s– ein Leerzeichen; \n ^– Anfang der Zeichenkette; \n $– Ende der Zeichenkette. \n
Quantoren steuern die Anzahl der Wiederholungen:
\n- \n
+– ein- oder mehrmals; \n *– null- oder mehrmals; \n ?– null- oder einmal; \n {n}– genau n-mal; \n {n,m}– von n bis m-mal. \n
Beispiel: Finden wir alle Wörter, die nur aus lateinischen Buchstaben bestehen und eine Länge von 3 bis 5 Zeichen haben.
\nString text = "Java regex example for beginners";\nString regex = "\\\\b[a-zA-Z]{3,5}\\\\b";\n\nPattern pattern = Pattern.compile(regex);\nMatcher matcher = pattern.matcher(text);\n\nwhile (matcher.find()) {\n System.out.println(matcher.group());\n}\n// Ausgabe: Java, regex, for\nDie Wortgrenze \\\\b verhindert teilweise Übereinstimmungen (z. B. wird "Java" nicht Teil von "JavaScript" sein).
3. Praktische Beispiele: Validierung und Datenextraktion
\nKommen wir zu Aufgaben, die in der realen Entwicklung häufig vorkommen.
\n\n3.1. Validierung einer E-Mail-Adresse
\nEinfachste Überprüfung: Vorhandensein des "@"-Zeichens und der Domain.
\npublic static boolean isValidEmail(String email) {\n String regex = "^[\\\\w.-]+@[\\\\w.-]+\\\\.\\\\w{2,}$";\n return Pattern.matches(regex, email);\n}\n\npublic static void main(String[] args) {\n System.out.println(isValidEmail("user@example.com")); // true\n System.out.println(isValidEmail("invalid-email")); // false\n}\nDie Methode Pattern.matches() überprüft automatisch die gesamte Zeichenkette (entspricht matcher.matches()).
3.2. Extraktion von Telefonnummern
\nAngenommen, im Text kommen Nummern im Format "+7 (999) 123-45-67" vor.
\nString text = "Kontakt: +