Regex-Spickzettel und gängige Muster
Reguläre Ausdrücke, kurz Regex, sind leistungsstarke Musterabgleichswerkzeuge, die in fast jeder Programmiersprache und jedem Texteditor verwendet werden. Obwohl die Syntax auf den ersten Blick kryptisch erscheinen mag, ermöglicht Ihnen die Beherrschung von Regex, Text auf präzise Weise zu durchsuchen, zu validieren, zu extrahieren und zu transformieren, die mit prozeduralem Code Dutzende von Zeilen erfordern würde. Dieser Leitfaden behandelt die grundlegende Syntax, gängige Muster und praktische Tipps, die Sie kennen müssen.
Spickzettel der grundlegenden Regex-Syntax
Zeichenklassen
| Muster | Bedeutung | Beispiel |
|---|---|---|
| . | Beliebiges Zeichen außer Zeilenumbruch | a.c trifft abc, a1c, a c |
| \d | Beliebige Ziffer (0-9) | \d\d trifft 42 |
| \D | Beliebiges Nicht-Ziffer-Zeichen | \D trifft a, !, Leerzeichen |
| \w | Wortzeichen (a-z, A-Z, 0-9, _) | \w+ trifft hello_123 |
| \W | Nicht-Wortzeichen | \W trifft @, #, Leerzeichen |
| \s | Leerzeichen (Leerzeichen, Tab, Zeilenumbruch) | a\sb trifft a b |
| \S | Nicht-Leerzeichen | \S+ trifft hello |
| [abc] | Beliebiges Zeichen in der Menge | [aeiou] trifft Vokale |
| [^abc] | Beliebiges Zeichen nicht in der Menge | [^0-9] trifft Nicht-Ziffern |
| [a-z] | Zeichenbereich | [A-Za-z] trifft beliebige Buchstaben |
Quantoren
| Muster | Bedeutung | Beispiel |
|---|---|---|
| * | Null oder mehr | ab*c trifft ac, abc, abbc |
| + | Einmal oder mehr | ab+c trifft abc, abbc |
| ? | Null oder einmal | colou?r trifft color, colour |
| {n} | Genau n-mal | \d{4} trifft 4-stellige Zahl |
| {n,} | n-mal oder mehr | \d{2,} trifft 2 oder mehr Ziffern |
| {n,m} | n- bis m-mal | \d{3,5} trifft 3-5 Ziffern |
Anker und Grenzen
| Muster | Bedeutung | Beispiel |
|---|---|---|
| ^ | Anfang der Zeichenfolge oder Zeile | ^Hello trifft Hello am Anfang |
| $ | Ende der Zeichenfolge oder Zeile | world$ trifft world am Ende |
| \b | Wortgrenze | \bcat\b trifft cat als ganzes Wort |
| \B | Keine Wortgrenze | \Bcat trifft cat in scattered |
Gruppierung und Alternierung
| Muster | Bedeutung | Beispiel |
|---|---|---|
| (abc) | Erfassende Gruppe | (ab)+ trifft abab |
| (?:abc) | Nicht-erfassende Gruppe | (?:ab)+ trifft abab |
| a|b | Alternierung (oder) | cat|dog trifft cat oder dog |
| \1 | Rückverweis auf Gruppe 1 | (\w)\1 trifft aa, bb |
| Benannte Erfassungsgruppe | Referenziert über name |
Gängige Regex-Muster
Hier sind die am häufigsten verwendeten Regex-Muster in der Webentwicklung und Datenvalidierung:
E-Mail-Validierung
Ein praktischer E-Mail-Regex, der die meisten ungültigen Adressen erfasst, ohne zu streng zu sein: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$. Dieses Muster validiert die grundlegende E-Mail-Struktur und erlaubt gleichzeitig gängige Zeichen im lokalen Teil und erfordert einen gültigen Domainnamen mit einer TLD von mindestens zwei Zeichen.
URL-Validierung
Übereinstimmung mit HTTP- und HTTPS-URLs: ^https?:\/\/(www\.)?[a-zA-Z0-9-]+\.[a-zA-Z]{2,}(\/[^\s]*)?$. Dieses Muster entspricht URLs mit optionalem www-Präfix, Domainname und optionalem Pfad.
Telefonnummer (USA)
US-Telefonnummern in verschiedenen Formaten: ^\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}$. Dieses Muster behandelt Formate wie (555) 123-4567, 555-123-4567 und 5551234567.
IP-Adresse (IPv4)
Validierung der IPv4-Adresse: ^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$. Dieses Muster stellt sicher, dass jedes Oktett zwischen 0 und 255 liegt.
Datum (JJJJ-MM-TT)
ISO-Datumsformat: ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$. Dieses Muster validiert die Formatstruktur, prüft aber nicht auf gültige Tage pro Monat.
Hexadezimale Farbcodes
Übereinstimmung mit hexadezimalen CSS-Farben: ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$. Dieses Muster entspricht der 3-stelligen Kurzschreibweise (#fff) und der 6-stelligen (#ffffff) Form.
Fortgeschrittene Techniken
Lookahead und Lookbehind
Lookahead- und Lookbehind-Assertionen ermöglichen es Ihnen, ein Muster nur dann zu treffen, wenn ein anderes Muster danach (oder davor) folgt (oder nicht folgt), ohne den umgebenden Text in das Ergebnis einzubeziehen.
- Positiver Lookahead (?=pattern): Trifft nur, wenn das Muster danach folgt. Beispiel: \d(?=px) trifft nur Ziffern vor "px".
- Negativer Lookahead (?!pattern): Trifft nur, wenn das Muster nicht danach folgt. Beispiel: \d(?!px) trifft Ziffern, die nicht vor "px" stehen.
- <=pattern): Trifft nur, wenn das Muster davor steht. Beispiel: (?<=\$)\d+ trifft Ziffern nach einem Dollarzeichen.
Gierige vs. faule Quantoren
<.*>bold<.*?>" abgleicht.
Leistungstipps für Regex
- Verwenden Sie nicht-erfassende Gruppen (?:), wenn Sie den Inhalt der erfassten Gruppe nicht extrahieren müssen
- Verwenden Sie possessive Quantoren oder atomare Gruppen, wenn unterstützt, um übermäßiges Backtracking zu vermeiden
- Verwenden Sie spezifische Zeichenklassen anstelle des Punkt-Metazeichens
- Verankern Sie Ihr Muster mit ^ und $, wenn Sie die gesamte Zeichenfolge abgleichen müssen
- Kompilieren Sie Regex-Muster vor, wenn Sie sie wiederholt in Schleifen verwenden
- Verwenden Sie Wortgrenzen \b anstelle von ^ und $, wenn Sie in größerem Text suchen
Regex testen und debuggen
Testen Sie Regex-Muster immer mit realen Eingaben, bevor Sie sie bereitstellen. Verwenden Sie einen interaktiven Regex-Tester, der Übereinstimmungen in Echtzeit hervorhebt und jeden Teil des Musters erklärt. Dies hilft Ihnen, Randfälle zu erkennen und zu verstehen, warum ein Muster eine bestimmte Eingabe trifft oder nicht. Probieren Sie unseren kostenlosen Regex-Tester aus, um Ihre Muster interaktiv zu erstellen und zu testen.
Verwenden Sie unsere kostenlosen Tools, um Ihre Regex-Muster zu erstellen, zu testen und zu debuggen.
Regex-Tester ausprobierenRegex-SpickzettelHäufig gestellte Fragen
Was ist der Unterschied zwischen gierigen und faulen Regex-Quantoren?
Gierige Quantoren gleichen so viel Text wie möglich ab, während faule Quantoren so wenig Text wie möglich abgleichen. Das Hinzufügen eines Fragezeichens nach einem Quantor macht ihn faul. Zum Beispiel: .* gleicht die längstmögliche Zeichenfolge ab, während .*? die kürzeste abgleicht.
Sind reguläre Ausdrücke in allen Programmiersprachen gleich?
Nein, die Regex-Implementierung variiert je nach Sprache. Die meisten unterstützen die grundlegende POSIX-Syntax, aber fortgeschrittene Funktionen wie Lookbehind, benannte Gruppen und Unicode-Unterstützung unterscheiden sich. JavaScript hatte historisch eine eingeschränkte Regex-Unterstützung, hat aber in den letzten Jahren viele Funktionen hinzugefügt.
Können reguläre Ausdrücke HTML oder XML parsen?
Nein, reguläre Ausdrücke können HTML oder XML nicht zuverlässig parsen, da es sich um verschachtelte, kontextfreie Sprachen handelt. Regex hat kein Konzept von Verschachtelungstiefe oder ausgeglichenen Tags. Verwenden Sie einen geeigneten HTML- oder XML-Parser. Regex kann einfache Muster aus HTML extrahieren, scheitert aber an komplexen Strukturen.
Was sind Lookahead und Lookbehind in Regex?
<=pattern) ist ein positiver Lookbehind, der trifft, wenn das Muster davor steht. Die negativen Versionen verwenden ! anstelle von =.
Wie mache ich einen regulären Ausdruck case-insensitive?
Fügen Sie das i-Flag nach dem schließenden Begrenzer hinzu, um das gesamte Muster case-insensitive zu machen. Verwenden Sie in JavaScript /pattern/i. Verwenden Sie in Python re.IGNORECASE oder re.I als Flag. Sie können auch (?i) inline verwenden, um bestimmte Teile case-insensitive zu machen.
ToolHub's collection of 300+ free online tools including regex tester, cheat sheets, and more — no sign-up required.