Reguläre Ausdrücke in Java (RegEx)
In diesem Modul lernst du, wie du reguläre Ausdrücke in Java (regular expressions, kurz RegEx) einsetzt, um Text zu durchsuchen, zu prüfen oder zu verarbeiten.

Entschuldige, da fehlt noch was...
--> Erster Release, muss noch angeschaut und Aufgaben müssen definiert werdenZiele
- Ich weiss, wie ich in Java reguläre Ausdrücke mit
Pattern
undMatcher
verwende. - Ich kann einfache RegEx-Ausdrücke in Java-Code integrieren.
- Ich kenne Sicherheitsaspekte bei der Verwendung von RegEx in Java.
Einführung
Lies zuerst das Modul Regex, bevor du hier weitermachst.
In Java werden reguläre Ausdrücke über die Klassen java.util.regex.Pattern
und java.util.regex.Matcher
verwendet.
Typische Anwendungsfälle:
- Prüfen, ob ein String einem Muster entspricht
- Teilstrings extrahieren
- Text mit Mustererkennung ersetzen
Beispiel: Prüfen einer E-Mail-Adresse
|
|
Beispiel: Alle Zahlen aus einem Text extrahieren
|
|
Ausgabe:
|
|
Beispiel: Text ersetzen
|
|
Ausgabe:
|
|
Sicherheitsaspekte bei RegEx in Java
1. Catastrophic Backtracking
- Problem: Auch in Java kann ein ungünstig formulierter RegEx zu extrem langer Laufzeit führen.
- Beispiel:
1 2 3 4
String regex = "(a+)+$"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!"); System.out.println(matcher.matches()); // dauert sehr lange
- Lösung: Verwende möglichst präzise Quantifizierer (
{1,10}
statt+
), Atomic Groups ((?>...)
) oder possessive Quantifiers (++
,*+
).
2. Injection durch dynamische Muster
- Problem: Wenn der RegEx direkt aus Benutzereingaben besteht, kann er manipuliert werden.
- Unsicher:
1
Pattern pattern = Pattern.compile(userInput);
- Sicherer: Benutzereingabe escapen:
1 2
String safeInput = Pattern.quote(userInput); Pattern pattern = Pattern.compile(safeInput);
3. Übermäßige Komplexität
- Problem: Java-Entwickler neigen dazu, sehr komplexe RegEx zu schreiben, die kaum wartbar sind.
- Empfehlung: Komplexe Muster aufteilen, ggf. mit Kommentaren (
(?x)
-Flag) lesbarer machen.
4. Falsche Annahmen bei Validierung
- Problem: Nur weil ein String das Muster erfüllt, heißt das nicht, dass er inhaltlich gültig ist.
- Beispiel:
a@b.c
erfüllt viele E-Mail-RegEx, ist aber oft ungültig.
Best Practices für RegEx in Java
- Immer testen – mit realistischen und Worst-Case-Eingaben.
- Komplexität reduzieren – ggf. mehrere kleine RegEx verwenden.
- Benutzereingaben escapen –
Pattern.quote()
nutzen. - Performance im Blick behalten – keine unkontrollierten
.*
in Kombination mit.+
.
Tipp
Testen von Java-RegEx-Ausdrücken online:
- regex101.com – Java-Modus auswählen
- RegExPlanet – Java-spezifischer RegEx-Tester
Zuletzt geändert July 29, 2025: Fix link title (a19ab159d)