Fortgeschrittene Zeichenkettenfilterung
Techniken zur komplexen Zeichenkettenverarbeitung
Die fortgeschrittene Zeichenkettenfilterung geht über die einfache Mustererkennung hinaus und ermöglicht ausgefeilte Strategien zur Textmanipulation und -validierung.
Lookahead- und Lookbehind-Assertionen
Positives Lookahead
Passt auf ein Muster nur, wenn es von einem bestimmten Muster gefolgt wird.
Pattern p = Pattern.compile("\\w+(?=@labex\\.io)");
Matcher m = p.matcher("[email protected] [email protected]");
while (m.find()) {
System.out.println(m.group()); // Gibt die Benutzernamen aus
}
Negatives Lookahead
Passt auf ein Muster, wenn es nicht von einem bestimmten Muster gefolgt wird.
Pattern p = Pattern.compile("\\d+(?!px)");
Matcher m = p.matcher("100px 200 300px");
while (m.find()) {
System.out.println(m.group()); // Gibt 200 aus
}
Ablauf der Filterung
graph TD
A[Eingabezeichenkette] --> B[Regex-Muster]
B --> C{Fortgeschrittene Filterung}
C -->|Lookahead| D[Bedingte Übereinstimmung]
C -->|Ersetzung| E[Texttransformation]
C -->|Aufteilung| F[Zeichenkettensegmentierung]
Fortgeschrittene Filterungstechniken
1. Komplexe Ersetzungen
Ersetzt Muster mit ausgefeilter Logik.
String input = "Price: $45.99, Discount: 20%";
String filtered = input.replaceAll(
"\\$(\\d+\\.\\d+)",
match -> {
double price = Double.parseDouble(match.group(1));
return String.format("$%.2f", price * 0.9);
}
);
2. Bedingte Filterung
List<String> emails = Arrays.asList(
"[email protected]",
"[email protected]",
"[email protected]"
);
List<String> filteredEmails = emails.stream()
.filter(email -> email.matches(".*@labex\\.io"))
.collect(Collectors.toList());
Fortgeschrittene Filterungsstrategien
Strategie |
Beschreibung |
Anwendungsfall |
Lookahead |
Bedingte Übereinstimmung |
Validierung mit Kontext |
Negative Übereinstimmung |
Bestimmte Muster ausschließen |
Datenbereinigung |
Transformation |
Komplexe Ersetzungen |
Textnormalisierung |
Leistungsoptimierung
- Kompilieren Sie Muster einmal.
- Verwenden Sie nicht erfassende Gruppen.
- Minimieren Sie das Backtracking.
- Nutzen Sie Stream-Operationen.
Praktische Filterungsszenarien
Verarbeitung von Protokolldateien
String logPattern = "(?<timestamp>\\d{4}-\\d{2}-\\d{2}) " +
"(?<level>ERROR|WARN) " +
"(?<message>.*)";
Pattern p = Pattern.compile(logPattern);
Datenvalidierung
String passwordRegex = "^(?=.*[A-Z])" + // Mindestens ein Großbuchstabe
"(?=.*[a-z])" + // Mindestens ein Kleinbuchstabe
"(?=.*\\d)" + // Mindestens eine Ziffer
".{8,}$"; // Mindestens 8 Zeichen
Tipps von LabEx
- Verstehen Sie die Komplexität von regex.
- Testen Sie Muster schrittweise.
- Verwenden Sie Online-Tools zur Visualisierung von regex.
- Berücksichtigen Sie die Auswirkungen auf die Leistung.
Das Beherrschen der fortgeschrittenen Zeichenkettenfilterung befähigt Entwickler, komplexe Herausforderungen bei der Textverarbeitung effizient zu bewältigen!