Drei Praxisfälle für regex
Regex wird konkret in drei Arten von Operationen eingesetzt:
- Validierung: prüfen, ob ein Text einem Format entspricht (z. B. E-Mail, Handynummer)
- Extraktion: in einem Text Inhalte finden, die einem Muster entsprechen (alle URLs, alle Beträge)
- Ersetzung: die dem Muster entsprechenden Teile durch etwas anderes ersetzen (Datumsformat vereinheitlichen, Handynummer maskieren)
Nachfolgend Demonstration anhand konkreter Fälle.
Validierungsfälle
Handynummer validieren
regex: ^1[3-9]\d{9}$
Wichtig: Anfang und Ende mit ^ und $ verankern, damit die gesamte Zeichenkette eine Handynummer ist und kein längerer Text, der die Nummer enthält. Die zweite Ziffer auf 3-9 zu beschränken entspricht den aktuellen Nummernbereichsregeln.
E-Mail validieren
regex: ^[\w.-]+@[\w.-]+.\w+$
Wichtig: Die vereinfachte Version reicht; eine strenge E-Mail-regex ist sehr komplex. In echten Projekten kombiniert man die vereinfachte Version mit dem Versand einer Bestätigungs-E-Mail als doppelte Absicherung.
Personalausweis validieren
regex: ^\d{17}[\dXx]$
Wichtig: 18 Zeichen, die ersten 17 sind Ziffern, das letzte eine Ziffer oder X. Diese regex prüft nur das Format, nicht die Prüfziffer.
URL validieren
regex: ^https?://[\w.-]+
Wichtig: beginnt mit http oder https, gefolgt von einer Domain. Vereinfachte Version; eine vollständige URL-regex ist extrem komplex.
Extraktionsfälle
Alle Handynummern extrahieren
regex: 1[3-9]\d{9}
Ohne ^ und $, um alle Handynummern im Text zu finden. Globale Übereinstimmung verwenden (Flag g).
Alle URLs extrahieren
regex: https?://[\w./?=&%-]+
Trifft auf URLs, die mit http(s) beginnen. Tatsächliche URL-Zeichen sind komplexer, Zeichensatz nach Bedarf anpassen.
Alle Beträge extrahieren
regex: [¥$]\d+(?:.\d+)?
Trifft auf Beträge, die mit ¥ oder $ beginnen, Nachkommastellen optional. Zum Beispiel ¥100, $99.9.
HTML-Tag-Inhalt extrahieren
regex: <a[^>]*>([^<]+)
Extrahiert den Text innerhalb des a-Tags. Die Klammern erfassen den Textinhalt. Beachten Sie, dass diese Art regex HTML nicht robust verarbeitet; bei komplexem HTML ist ein Parser zuverlässiger.
Ersetzungsfälle
Handynummer maskieren
Die mittleren 4 Ziffern durch Sternchen ersetzen: 1[3-9]\d{9} ersetzen unter Beibehaltung der ersten 3 und der letzten 4 Ziffern.
In der Praxis mit einfangenden Gruppen: regex (1[3-9]\d)\d{4}(\d{4}), ersetzen durch \1****\2. \1 und \2 verweisen auf die Gruppen.
Datumsformat vereinheitlichen
2026/07/12 in 2026-07-12 umwandeln: regex (\d{4})/(\d{2})/(\d{2}), ersetzen durch \1-\2-\3.
Überflüssige Leerzeichen entfernen
Mehrere aufeinanderfolgende Leerzeichen in eines umwandeln: regex \s+, ersetzen durch ein einzelnes Leerzeichen.
HTML-Tags entfernen
Alle HTML-Tags entfernen und nur Text behalten: regex <[^>]+>, ersetzen durch eine leere Zeichenkette. Beachten Sie, dass > innerhalb von Tag-Attributen verloren gehen; in komplexen Fällen einen Parser verwenden.
Debugging-Tipps
Schrittweise mit einem Test-Tool prüfen
Verwenden Sie das regex-Test-Tool:
- regex eingeben
- Testtext eingeben (mit Beispielen, die treffen und nicht treffen sollen)
- Hervorgehobene Treffer ansehen
- regex schrittweise anpassen, bis das Ergebnis stimmt
Zuerst treffen, dann optimieren
Schreiben Sie zuerst eine regex, die trifft, und denken Sie dann über Optimierung (Performance, Genauigkeit) nach. Streben Sie nicht sofort nach Perfektion.
Online regex visualisieren
Bei komplexen regex ein Visualisierungstool verwenden, um die Struktur zu zerlegen und die Bedeutung jedes Abschnitts zu klären.
Randfälle beachten
- Leere Zeichenkette
- Zeichenketten mit nur teilweiser Übereinstimmung
- Zeichenketten mit Sonderzeichen
- Sehr lange Zeichenketten
Wiederverwendbare regex-Muster
Chinesische Zeichen
[\u4e00-\u9fa5]+
Postleitzahl
^\d{6}$
QQ-Nummer
^[1-9]\d{4,10}$
Hexadezimale Farbe
^#[0-9a-fA-F]{6}$
Versionsnummer
^\d+.\d+.\d+$
Häufige Fallstricke
Gierige Übereinstimmung
.* trifft zu viel. Für den Tag-Inhalt [^<]+ statt .* verwenden, um übergreifende Treffer über mehrere Tags zu vermeiden.
Nicht escapte Sonderzeichen
Metazeichen wie Punkt, Stern, Fragezeichen müssen escaped werden. Für einen Backslash selbst \ schreiben.
Mehrzeilige Übereinstimmung
Standardmäßig trifft . nicht auf Zeilenumbrüche. Für mehrzeiligen Text den Einzeilenmodus aktivieren oder [\s\S] verwenden, um ein beliebiges Zeichen zu treffen.
Performance-Probleme
Catastrophic backtracking (katastrophales Zurückverfolgen): verschachtelte Quantoren wie (a+)+ können bei bestimmten Eingaben extrem langsam sein. Bei komplexen regex auf Performance achten; sehr lange Texte vor dem Matchen abschneiden.
Zusammenfassung
Die regex-Praxis teilt sich in drei Kategorien: Validierung, Extraktion und Ersetzung. Validierung nutzt die Anker ^ und $, Extraktion die globale Übereinstimmung, Ersetzung die Verweise auf einfangende Gruppen. Testen Sie regex zuerst mit einem Tool, dann optimieren. Merken Sie sich einige gängige Muster (Handynummer, E-Mail, Datum, URL) für den Alltag. Das regex-Test-Tool von DocsAll läuft im Browser: testen Sie beim Schreiben, Ihr Text wird nicht hochgeladen.