Software

Was ist Regex? Reguläre Ausdrücke einfach erklärt, mit Beispielen

Talha Aslan 18 Minuten Lesezeit 4 Aufrufe

Was ist Regex, und warum braucht fast jeder Entwickler früher oder später reguläre Ausdrücke? In diesem Leitfaden erklären wir von Talha Aslan und Team die Definition, die Syntax, typische Validierungen, Unterschiede zwischen Sprachen und das Risiko für die Performance. Es gibt keine Codeblöcke. Sie finden nur kurze Beispiele im Fließtext, die Sie sofort ausprobieren können.

Was ist Regex?

Regex (kurz für regular expression, auf Deutsch regulärer Ausdruck) ist eine kompakte Sprache, die ein Zeichenmuster für die Suche in Texten beschreibt. Zum Beispiel bedeutet das Muster \d+ „eine oder mehrere Ziffern“. Entwickler nutzen Regex zum Suchen, Prüfen, Extrahieren und Ersetzen, und fast jede Programmiersprache unterstützt sie.

Kurz gesagt: Mit Regex sagen Sie nicht „finde genau dieses Wort“, sondern „finde alles, was dieser Regel folgt“. Deshalb ersetzt eine einzige Zeile oft Dutzende Zeilen mit Schleifen und Bedingungen. Allerdings hat diese Stärke ihren Preis bei Lesbarkeit und Wartung. Später zeigen wir deshalb auch, wann Regex passt und wann Sie besser einen anderen Weg wählen.

Der Begriff stammt aus der Theorie formaler Sprachen in der Informatik. Moderne Engines ergänzen diese Theorie jedoch um praktische Extras wie Rückverweise und Lookarounds. Folglich ist das heutige „Regex“ eine etwas größere Werkzeugfamilie als das strenge theoretische Modell.

Was ist Regex in einfachen Worten, mit einem Vergleich aus dem Alltag?

Stellen Sie sich vor, Sie bitten in einer Bibliothek um „Bücher mit dem Wort Geschichte auf dem Umschlag“. Das entspricht einer einfachen Textsuche. Bitten Sie dagegen um „Regaletiketten, die mit einer vierstelligen Jahreszahl, einem Bindestrich und einem zweistelligen Monat beginnen“, denken Sie in Regex. Die erste Bitte nennt ein Wort, die zweite beschreibt eine Form.

Ein Ausstecher für Plätzchen ist ein weiteres gutes Bild. Sie drücken ihn in den Teig, und jedes passende Stück kommt heraus. Ein Regex Muster arbeitet genauso mit Text. Die Engine schiebt es von links nach rechts und gibt Ihnen die passenden Stücke.

Der Vergleich enthält zudem eine Warnung. Ist der Ausstecher schlecht geformt, erhalten Sie falsche Stücke. Daher sollten Sie zuerst überlegen, was Sie finden wollen, und dann, was Sie auf keinen Fall finden dürfen. Unserer Erfahrung nach entstehen die meisten Fehler, weil Entwickler die zweite Frage überspringen.

Wie durchsucht eine Regex Engine einen Text?

Zunächst übersetzt die Engine Ihr Muster in eine interne Struktur. Dann versucht sie, das Muster ab dem ersten Zeichen des Textes anzulegen. Scheitert der Versuch, geht sie zur nächsten Startposition. Deshalb kann ein Muster an jeder Stelle eines Textes passen.

Die meisten verbreiteten Engines arbeiten mit Backtracking. Dabei wählt die Engine einen Weg und kehrt um, sobald der Weg in eine Sackgasse führt. Danach probiert sie eine andere Option. Bei a.*b verschluckt die Engine zum Beispiel erst so viele Zeichen wie möglich. Anschließend gibt sie Zeichen einzeln zurück, bis sie ein b findet.

Manche Engines gehen anders vor. Sie garantieren eine Laufzeit, die linear mit der Länge der Eingabe wächst. Allerdings verzichten diese Engines meist auf Funktionen wie Rückverweise. Dieser Unterschied spielt im Abschnitt zur Performance eine große Rolle.

In der Praxis müssen Sie die Interna nicht auswendig kennen. Trotzdem hilft eine Tatsache: Eine Engine mit Backtracking probiert unter Umständen jeden möglichen Weg. Wer das weiß, erkennt langsame Muster früher.

Wofür sind Zeichenklassen da?

Eine Zeichenklasse ist eine Menge von Zeichen, die an einer einzigen Position stehen dürfen. Sie schreiben sie in eckige Klammern: [abc] akzeptiert a, b oder c. Außerdem können Sie Bereiche angeben. So deckt [0-9] jede Ziffer ab und [a-z] die kleinen englischen Buchstaben.

Für häufige Klassen gibt es Kurzformen:

  • \d: eine Ziffer.
  • \w: ein „Wortzeichen“ wie Buchstabe, Ziffer oder Unterstrich.
  • \s: ein Leerraum wie Leerzeichen, Tabulator oder Zeilenumbruch.
  • .: standardmäßig jedes Zeichen außer dem Zeilenumbruch.
  • [^0-9]: ein vorangestelltes Dach kehrt die Menge um, also „alles außer Ziffern“.

Bei deutschen Texten ist Vorsicht nötig. Zum Beispiel enthält [a-z] weder ä, ö, ü noch ß. Zudem erfasst \w in manchen Sprachen Unicode Buchstaben, in anderen nicht. Prüfen Sie deshalb das Unicode Verhalten in der Dokumentation Ihrer Sprache, bevor Sie Umlaute verarbeiten.

Wie funktionieren Quantoren?

Ein Quantor sagt der Engine, wie oft das vorherige Element vorkommen darf. Es gibt vier zentrale Quantoren. Ein Stern * bedeutet null oder mehr. Danach folgt das Plus + für eins oder mehr. Ein Fragezeichen ? steht für null oder eins, und {n,m} heißt mindestens n und höchstens m.

So verlangt \d{3} genau drei Ziffern. Ebenso akzeptiert \d{2,4} zwei bis vier Ziffern. Das Muster Fotos? passt auf „Foto“ und „Fotos“, denn das Fragezeichen macht nur das letzte s optional.

Ein Detail übersehen allerdings viele. Ein Quantor wirkt nur auf das Element direkt davor. Wollen Sie ein ganzes Wort wiederholen, müssen Sie es in Klammern setzen. Anders gesagt: ha+ passt auf „haaaa“, (ha)+ dagegen auf „hahaha“.

Außerdem sind verschachtelte Quantoren die Wurzel der Risiken, die Sie im Abschnitt zur Performance sehen. Eine harmlos wirkende Wiederholung kann die Engine bei ungünstiger Eingabe sekundenlang beschäftigen.

Warum sind Gruppen und Erfassungen wichtig?

Runde Klammern erfüllen zwei Aufgaben. Erstens fassen sie mehrere Elemente zu einer Einheit zusammen, sodass ein Quantor auf diese Einheit wirkt. Zweitens „erfassen“ sie den gefundenen Teil. Somit können Sie im Code gezielt auf diesen Teil zugreifen.

Zum Beispiel findet (\d{4})-(\d{2})-(\d{2}) ein Datum und legt Jahr, Monat und Tag in drei Gruppen ab. Beim Ersetzen verweisen Sie über Nummern auf diese Gruppen. Dann wird aus 2024-05-17 mit einer einzigen Zeile die deutsche Reihenfolge Tag, Monat, Jahr.

Brauchen Sie die Erfassung nicht, nehmen Sie eine nicht erfassende Gruppe: (?:...). Diese Schreibweise zeigt Ihre Absicht klar und hält die Nummerierung sauber. Viele Sprachen unterstützen zudem benannte Gruppen. Eine benannte Gruppe beendet die Frage „Was war noch mal Gruppe drei?“ in langen Mustern.

Innerhalb einer Gruppe bietet der senkrechte Strich | Alternativen an. Konkret akzeptiert (jpg|png|webp) eine von drei Dateiendungen. Zusammengefasst ordnen Gruppen also sowohl den Aufbau eines Musters als auch die Daten, die Sie herausholen.

Was markieren Anker und Grenzen?

Ein Anker steht für eine Position, nicht für ein Zeichen. Das Dach ^ markiert den Anfang des Textes oder der Zeile, $ das Ende. Das Zeichen \b ist eine Wortgrenze. Es beschreibt den unsichtbaren Punkt zwischen einem Wortzeichen und einem anderen Zeichen.

Für die Validierung sind Anker entscheidend. Zum Beispiel findet \d{5} auch in „abc12345xyz“ einen Treffer, weil ein Teilstück genügt. Dagegen akzeptiert ^\d{5}$ nur Text, der von Anfang bis Ende aus genau fünf Ziffern besteht, etwa eine Postleitzahl.

Auch bei der Suche helfen Wortgrenzen. Das Muster \bTor\b findet das Wort „Tor“, überspringt aber „Torte“ und „Motor“. Allerdings hängt \b von der Definition eines Wortzeichens ab. Daher verhält es sich bei Umlauten je nach Sprache unterschiedlich.

In mehrzeiligen Texten zeigen ^ und $ standardmäßig auf Anfang und Ende der gesamten Eingabe. Möchten Sie jede Zeile einzeln betrachten, schalten Sie den Modus für mehrere Zeilen ein. Die Flags behandeln wir kurz in einem späteren Abschnitt.

Was ist der Unterschied zwischen gierigem und genügsamem Matching?

Quantoren sind standardmäßig gierig (greedy). Das heißt, sie nehmen so viele Zeichen wie möglich und geben nur bei Bedarf etwas zurück. Die genügsame Variante (lazy) begnügt sich mit möglichst wenigen Zeichen. Sie schreiben sie, indem Sie dem Quantor ein Fragezeichen anhängen: *? oder +?.

Nehmen wir eine Zeile mit zwei Wörtern in Anführungszeichen: "Apfel" und "Birne". Das gierige Muster ".*" nimmt alles vom ersten bis zum letzten Anführungszeichen als ein Stück. Das genügsame Muster ".*?" erfasst dagegen jedes Wort einzeln. Bei der Datenextraktion ist das der Unterschied zwischen richtigem und kaputtem Ergebnis.

Andererseits ist der genügsame Quantor nicht immer die beste Lösung. Oft ist eine verneinte Zeichenklasse klarer und schneller. So sagt "[^"]*" „alles, was kein Anführungszeichen ist“ und erledigt dieselbe Aufgabe ohne zusätzliches Backtracking.

Bevor unser Team einen genügsamen Quantor schreibt, stellen wir daher eine kurze Frage. Wissen wir, welches Zeichen hier nicht vorkommen darf? Lautet die Antwort ja, ergibt eine verneinte Klasse meist ein robusteres Muster.

Wie verändern Flags einen Treffer?

Ein Flag ist eine Einstellung, die für das gesamte Muster gilt. Die Schreibweise unterscheidet sich zwischen Sprachen, die Ideen bleiben jedoch gleich. Diese Flags begegnen Ihnen am häufigsten:

  1. Groß und Kleinschreibung ignorieren: „Regex“ und „regex“ zählen als gleich.
  2. Mehrzeilig: ^ und $ markieren Anfang und Ende jeder Zeile.
  3. Punkt für alles: der Punkt . passt auch auf Zeilenumbrüche.
  4. Global: die Engine findet alle Treffer, statt beim ersten zu stoppen.
  5. Unicode: Buchstabenklassen folgen den Unicode Regeln.

Das Ignorieren der Schreibweise hat in manchen Sprachen Tücken. Im Deutschen etwa wird aus dem kleinen ß in Großbuchstaben traditionell „SS“. Deshalb ist es oft sicherer, Text vor dem Vergleich einheitlich umzuwandeln. Dafür eignet sich unser Tool zur Groß und Kleinschreibung.

Was sind Lookarounds und Rückverweise?

Sobald Sie die Grundfrage „Was ist Regex?“ beantworten können, treffen Sie auf fortgeschrittene Funktionen. Zuerst kommt der Lookahead. Er prüft, ob nach einer Position ein bestimmtes Muster folgt, nimmt diese Zeichen aber nicht in den Treffer auf. Zum Beispiel findet \d+(?=EUR) nur Zahlen, auf die „EUR“ folgt.

Ein negativer Lookahead macht das Gegenteil. Er wählt Positionen, an denen ein Muster nicht folgt. Passwortregeln wie „muss eine Ziffer enthalten“ sehen Sie oft in dieser Form. Trotzdem sind getrennte, einfache Prüfungen meist besser lesbar als ein cleveres Muster.

Ein Rückverweis sucht denselben Text, den eine frühere Gruppe erfasst hat. So findet (\w+) \1 doppelte Wörter wie „die die“. Damit entdecken Sie beim Korrekturlesen versehentliche Wiederholungen in Sekunden.

Allerdings bietet nicht jede Engine diese Funktionen, und sie belasten unter Umständen die Performance. Wer also „Was ist Regex?“ auf fortgeschrittenem Niveau beantworten will, sollte wissen, welche Sprachen sie unterstützen.

Wie setzen Sie Regex bei der Prüfung von E-Mail Adressen ein?

Die Prüfung von E-Mail Adressen ist die häufigste Folgefrage nach „Was ist Regex?“. Die kurze Antwort lautet so. Prüfen Sie mit Regex, ob eine Adresse ungefähr richtig aussieht. Ob sie tatsächlich funktioniert, klären Sie dann mit einer Bestätigungsmail.

Ein Muster, das alle Standards vollständig abbildet, ist extrem lang und kaum lesbar. Zudem bringt es wenig, denn eine formal korrekte Adresse ist vielleicht trotzdem unbenutzt. Daher ist ein schlichter Ansatz sinnvoll. Prüfen Sie also einen Teil ohne Leerzeichen, ein @, dann eine Domain mit mindestens einem Punkt.

Beispielszenario: In einem Kontaktformular tippt jemand die Adresse versehentlich mit Leerzeichen. Ein einfaches Muster erkennt das sofort und zeigt einen freundlichen Hinweis. Ein zu strenges Muster lehnt dagegen neue Domainendungen oder Adressen mit Pluszeichen ab. Somit verlieren Sie echte Kunden.

Außerdem prüfen Browser E-Mail Felder bereits selbst. Wiederholen Sie die Prüfung aber immer auf dem Server. Prüfungen im Browser verbessern nur die Nutzerführung und zählen nicht als Sicherheitsmaßnahme. Für Beispieladressen verwenden Sie reservierte Domains wie example.com.

Worauf sollten Sie bei Telefonnummern und Datumsangaben achten?

Bei Telefonnummern liegt das eigentliche Problem in der Vielfalt der Formate. Nutzer schreiben Leerzeichen, Bindestriche, Klammern oder eine Ländervorwahl. Normalisieren Sie deshalb zuerst den Text. Entfernen Sie Zeichen außer Ziffern mit einem Muster wie [^\d+] und prüfen Sie dann die Länge des Rests.

So ersetzen Sie ein komplexes Muster durch zwei einfache Schritte. Der erste Schritt bereinigt die Daten, der zweite wendet die Regel an. Weil gültige Längen je nach Land variieren, ist es meist ein Fehler, die ganze Regel in einen einzigen Ausdruck zu packen.

Bei Datumsangaben prüft Regex nur das Format. Zum Beispiel akzeptiert ^\d{4}-\d{2}-\d{2}$ problemlos 2024-02-31, obwohl der Februar keinen 31. Tag hat. Kurz gesagt: Kalenderlogik ist keine Aufgabe für Regex.

Der richtige Ablauf ist einfach. Zunächst filtern Sie das Format schnell mit Regex. Dann lassen Sie die Datumsbibliothek Ihrer Sprache den Text in ein echtes Datum umwandeln. Scheitert die Umwandlung, ist das Datum ungültig. Dieser zweistufige Ansatz bleibt lesbar und verlässlich.

Wie unterscheiden sich Regex Varianten zwischen Programmiersprachen?

Regex ist kein einzelner Standard. Stattdessen handelt es sich um eine Familie von Varianten mit gemeinsamem Kern. Zeichenklassen, Quantoren und Gruppen sehen fast überall gleich aus. Bei den fortgeschrittenen Funktionen beginnen jedoch die Unterschiede.

In JavaScript schreiben Sie ein Muster zum Beispiel zwischen Schrägstriche und hängen Flags am Ende an. Details finden Sie im MDN Leitfaden zu regulären Ausdrücken. Python verarbeitet Muster über das Modul re und empfiehlt Rohstrings (r"...") gegen Chaos bei Backslashes. Das erklärt außerdem die offizielle Python Dokumentation zum Modul re ausführlich.

Die wichtigsten Unterschiede betreffen diese Punkte:

  • Schreibweise benannter Gruppen und Verweise darauf beim Ersetzen.
  • Unterstützung für Lookbehind und dessen Grenzen.
  • Standardverhalten von Zeichenklassen bei Unicode.
  • Namen der Flags und welche Flags überhaupt existieren.
  • Fehlende Rückverweise in manchen Engines.

Folglich sollten Sie ein Muster immer testen, wenn Sie es in eine andere Sprache übertragen. Arbeiten Sie mit Python, bietet unser Beitrag zu den beliebtesten Python Bibliotheken einen breiteren Blick auf die Textverarbeitung.

Was ist ReDoS, und wie schützen Sie die Performance?

ReDoS (Regular expression Denial of Service) bezeichnet ein schlecht gebautes Muster, das bei bestimmten Eingaben extrem lange läuft und die Anwendung blockiert. Die OWASP Seite zu ReDoS beschreibt das als katastrophales Backtracking bei verschachtelten Wiederholungen.

Die riskante Form ist meist eine Wiederholung in einer Wiederholung, etwa (a+)+. Scheitert der Treffer, probiert die Engine jede mögliche Aufteilung der Zeichen auf die Gruppen. Mit wachsender Eingabe explodiert daher die Zahl der Versuche.

Zur Abwehr helfen Ihnen diese Schritte:

  1. Vermeiden Sie verschachtelte Quantoren und nutzen Sie möglichst nur eine Ebene der Wiederholung.
  2. Formulieren Sie Alternativen ohne Überschneidung, damit derselbe Text nicht auf zwei Wegen passt.
  3. Begrenzen Sie die Länge von Nutzereingaben, bevor der Ausdruck läuft.
  4. Nutzen Sie eine Zeitbegrenzung, falls Ihre Sprache oder Bibliothek sie anbietet.
  5. Prüfen Sie für kritische Stellen eine Engine mit linearer Laufzeitgarantie.
  6. Führen Sie Text von Nutzern niemals direkt als Muster aus.

Zudem liefert der Blick in Serverprotokolle eine frühe Warnung bei plötzlichen Verlangsamungen. Unsere Logfile Analyse hilft Ihnen, auffällig langsame Anfragen zu finden.

Regex, einfache Textsuche und Parser im Vergleich

Das passende Werkzeug spart mehr Zeit als ein cleveres Muster. Die folgende Tabelle stellt die drei Ansätze nebeneinander:

KriteriumEinfache TextsucheRegexParser
Was findet es?Ein festes Wort oder eine PhraseJeden Text, der einer Regel folgtDie vollständige Struktur eines Formats
LernaufwandFast keinerMittelHoch, aber Bibliotheken übernehmen viel
Verschachtelte StrukturenNicht möglichBegrenzt und fehleranfälligVon Grund auf vorgesehen
LesbarkeitSehr hochSinkt mit der LängeKlarer Code und klare Regeln
Risiko für PerformanceSehr geringReDoS bei schlechten MusternMeist gut vorhersehbar
Typischer EinsatzWort in einer Datei findenFormate prüfen, Daten extrahierenHTML, JSON, YAML, Quellcode

Kurz gesagt: Suchen Sie festen Text, ist Regex übertrieben. Verarbeiten Sie ein verschachteltes Format, reicht Regex nicht aus. YAML Dateien lesen Sie beispielsweise mit einem echten Parser. Das Format erklären wir in unserem Beitrag YAML: Was ist das und was unterscheidet es von JSON.

Typische Fehler nach der Frage „Was ist Regex?“

Wer sich gerade erst die Frage „Was ist Regex?“ beantwortet hat, macht meist dieselben Fehler. Kennen Sie diese vorab, sparen Sie sich stundenlange Fehlersuche.

  • Punkt ohne Escape: . heißt „beliebiges Zeichen“, für einen echten Punkt schreiben Sie \..
  • Anker vergessen: Ohne ^ und $ prüft die Validierung nur einen Teil des Textes.
  • Zu viel mit gierigen Quantoren: Zwischen Anführungszeichen oder Tags entstehen überraschend lange Treffer.
  • Durcheinander bei Backslashes: Regeln für Strings und Regeln für Regex überlagern sich.
  • Umlaute übersehen: [a-z] deckt weder ä noch ß ab.
  • Alles in ein riesiges Muster packen: Am Ende steht eine Zeile, die niemand mehr pflegen kann.

Die gemeinsame Lösung heißt Testen. Legen Sie für jedes Muster einige Beispiele an, die passen sollen, und einige, die nicht passen dürfen. Dann sehen Sie bei jeder Änderung sofort, was kaputtgegangen ist.

Wo hilft Regex in echten Projekten?

Regex spart bei vielen kleinen, aber häufigen Aufgaben im Entwickleralltag Zeit. Im Folgenden fassen wir Einsatzfälle zusammen, die unser Team oft sieht, jeweils als Beispielszenario.

Beispielszenario eins: In den Produktbeschreibungen eines Onlineshops steht eine alte Telefonnummer. Mit einem einzigen Ausdruck im Editor finden Sie jede Schreibweise dieser Nummer und ersetzen sie durch die neue.

Beispielszenario zwei: Sie brauchen aus Serverprotokollen die Zeilen mit einem bestimmten Fehlercode und die URLs darin. Ein Muster mit Gruppen wählt die Zeile aus und liefert die URL zusätzlich wie eine eigene Spalte.

Beispielszenario drei: Sie haben die URL Struktur einer Website geändert und müssen alte Pfade auf neue umleiten. Regeln für Weiterleitungen auf dem Server akzeptieren oft Regex. Für saubere Pfade hilft Ihnen außerdem unser Slug Generator.

Zudem gehören Umbenennungen im Code, die Prüfung von Formularfeldern und die Bereinigung von Daten zu den klassischen Feldern. Änderungen am Code verfolgen Sie sicher mit unserer Anleitung zu Git und GitHub.

Sollten Sie Regex auf API und Webhook Daten anwenden?

Antworten von APIs kommen meist in strukturierten Formaten wie JSON. In diesem Fall nutzen Sie den JSON Parser Ihrer Sprache, statt Felder per Regex herauszuziehen. Sonst bricht Ihr Muster still, sobald sich Reihenfolge, Leerzeichen oder Escapes ändern.

Andererseits ist die Prüfung eines einzelnen Feldes nach dem Parsen eine gute Aufgabe für Regex. Konkret prüfen Sie etwa, ob eine Bestellnummer einem festen Format folgt. Die Grundlagen erklären wir im Beitrag Was ist eine API.

Ebenso prüfen Sie bei Webhook Benachrichtigungen zuerst die Signatur und parsen dann den Inhalt. Regex kommt erst danach zum Zug, für das Format einzelner Felder. Den vollständigen Ablauf finden Sie in unserem Beitrag Webhook: Was ist das.

Die Regel lässt sich also leicht merken. Die Struktur gehört dem Parser, der einzelne Wert dem regulären Ausdruck. Diese Trennung senkt die Fehlerquote und erleichtert dem nächsten Entwickler das Lesen.

Wie schreiben Sie lesbare und wartbare reguläre Ausdrücke?

Am Tag des Schreibens wirkt ein Muster klar. Sechs Monate später gleicht es womöglich einem Rätsel. Deshalb sollten Sie Lesbarkeit von Anfang an einplanen.

Erstens zerlegen Sie das Muster in Teile. Viele Sprachen erlauben, ein Muster aus Variablen zusammenzusetzen. Definieren Sie etwa die Teile „Jahr“, „Monat“ und „Tag“ mit eigenen Namen, erklärt sich das Muster von selbst.

Zweitens nutzen Sie den ausführlichen Modus (verbose), wo Ihre Sprache ihn anbietet. Dieser Modus ignoriert Leerraum und erlaubt Kommentare im Muster. Die Python Dokumentation beschreibt ihn genau.

Drittens setzen Sie auf benannte Gruppen. Steht im Code „tag“ statt „Gruppe 3“, sinkt das Fehlerrisiko bei Änderungen deutlich.

Schließlich legen Sie neben jedes Muster eine kleine Testliste. Ändern Sie das Muster, antworten die Tests sofort. Somit verliert Regex den Ruf einer unheimlichen Blackbox und erhält dieselbe Pflege wie jeder andere Code.

Praktische Checkliste, wenn Sie wissen, was Regex ist

Bevor Sie ein Muster in Produktion bringen, empfehlen wir diese Liste:

  1. Reicht eine einfache Textsuche oder ein vorhandener Parser?
  2. Habe ich bei einer Validierung Anker am Anfang und am Ende?
  3. Habe ich Sonderzeichen wie Punkt, Plus und Klammern korrekt maskiert?
  4. Enthalten die Daten Umlaute oder andere Unicode Zeichen?
  5. Gibt es verschachtelte Wiederholungen oder überlappende Alternativen?
  6. Habe ich die Länge der Eingabe begrenzt?
  7. Wurde das Muster mit mindestens fünf passenden und fünf unpassenden Beispielen geprüft? Falls nicht, holen Sie das zunächst nach.
  8. Habe ich beim Wechsel der Sprache deren Dokumentation geprüft?

Die Liste wirkt kurz, fängt aber dennoch die meisten Probleme ab, die es bis in die Produktion schaffen. Vor allem die Punkte fünf und sechs sind für die Sicherheit wichtig.

Wann ist Regex das falsche Werkzeug?

Regex ist mächtig, passt allerdings nicht zu jedem Problem. Verschachtelte Formate wie HTML, XML oder JSON sind das bekannteste Beispiel. Dort können Tags oder Klammern beliebig tief ineinander stecken. Reguläre Ausdrücke können diese Tiefe nicht zuverlässig verfolgen.

Außerdem ist lesbarer Code besser als ein langer Ausdruck, wenn sich Geschäftsregeln oft ändern. Eine Regel wie „Geschäftskunden müssen eine Steuernummer angeben“ gehört in eine Bedingung, nicht in ein Muster.

Zudem ist die Verarbeitung natürlicher Sprache ein eigenes Feld. Wer mit Regex erkennen will, ob ein Satz positiv oder negativ klingt, landet schnell bei einem fragilen Konstrukt. Für solche Aufgaben eignen sich Sprachmodelle und spezielle Bibliotheken besser.

Zusammengefasst liefert Regex die besten Ergebnisse bei klar definierten, flachen Textmustern. Wirkt Ihr Muster wie ein ganzer Absatz, ist es Zeit, innezuhalten und einen anderen Ansatz zu prüfen.

Wie geht unser Team in Projekten mit Regex um?

Bei Talha Aslan und Team setzen wir Regex in Webprojekten in kleinen, getesteten und dokumentierten Bausteinen ein. Formatprüfungen laufen in der Validierungsschicht, die Geschäftslogik halten wir in separatem Code.

Bei jedem Muster, das Nutzereingaben verarbeitet, prüfen wir die Längengrenze und das Risiko für ReDoS. Zudem legen wir vor dem Einbau eines Musters ein kleines Testset aus passenden und unpassenden Beispielen an. So erzeugen spätere Änderungen keine stillen Fehler.

Zögern Sie bei Regex in einem Projekt, hilft eine einzige Frage. Versteht ein anderer Entwickler dieses Muster auch in sechs Monaten noch? Falls nicht, zerlegen Sie es, benennen Sie Teile oder schreiben Sie stattdessen schlichten Code. Diese Gewohnheit senkt im Team spürbar den Aufwand für die Wartung.

Planen Sie eine eigene Anwendung mit Textverarbeitung, etwa für Formulare, Weiterleitungen oder Protokolle, entwickeln wir sie gern gemeinsam im Rahmen unserer individuellen Softwareentwicklung.

Ein letzter Tipp: Am schnellsten lernen Sie Regex, indem Sie ein echtes kleines Problem lösen. Beginnen Sie mit einer einfachen Aufgabe, etwa Datumsangaben in einer Datei finden oder E-Mail Formate in einer Liste prüfen. Dann führen Sie bei jedem Schritt Ihre Tests aus.

Häufig gestellte Fragen

Was ist Regex, und welche Sprachen unterstützen es?
Regex ist eine kurze Sprache, die ein Zeichenmuster für die Suche in Texten beschreibt. Fast alle verbreiteten Programmiersprachen unterstützen sie, darunter JavaScript, Python, Java, PHP, C# und Go. Auch viele Editoren und Kommandozeilentools erlauben Suchen und Ersetzen mit Regex. Allerdings unterscheiden sich die Varianten bei fortgeschrittenen Funktionen, prüfen Sie daher die Dokumentation.
Ist Regex schwer zu lernen?
Die Grundlagen sind nicht schwer. Mit Zeichenklassen, Quantoren, Gruppen und Ankern lösen Sie die meisten Alltagsaufgaben. Schwierig wird es beim Lesen und Pflegen langer Muster. Deshalb empfehlen wir, mit kleinen Mustern zu beginnen und jedes mit passenden und unpassenden Beispielen zu testen. Mit regelmäßiger Übung fühlen Sie sich nach einigen Wochen sicher.
Kann Regex eine E-Mail Adresse vollständig prüfen?
Nein, Regex prüft nur das grobe Format. Ein Muster, das alle Standards abbildet, wird sehr lang und schwer lesbar. Außerdem beweist es nicht, dass jemand die Adresse tatsächlich nutzt. Sinnvoll ist eine einfache Formatprüfung und danach eine Bestätigungsmail. Wiederholen Sie die Prüfung zudem immer auf dem Server, nicht nur im Browser.
Wie senke ich das Risiko für ReDoS?
Vermeiden Sie zunächst verschachtelte Wiederholungen und formulieren Sie Alternativen ohne Überschneidung. Begrenzen Sie die Länge von Nutzereingaben, bevor der Ausdruck läuft. Nutzen Sie eine Zeitbegrenzung, falls Ihre Sprache sie anbietet, und prüfen Sie für kritische Stellen eine Engine mit linearer Laufzeit. Führen Sie Text von Nutzern niemals direkt als Muster aus.
Wann wähle ich gieriges oder genügsames Matching?
Der gierige Standardquantor sucht den längstmöglichen Treffer und reicht in den meisten Fällen aus. Ein genügsamer Quantor hilft, wenn Sie kurze Stücke zwischen Anführungszeichen oder Klammern einzeln erfassen wollen. Wissen Sie allerdings, welches Zeichen nicht vorkommen darf, ist eine verneinte Zeichenklasse meist klarer und schneller als beide Varianten.
Kann ich HTML oder JSON mit Regex parsen?
Davon raten wir ab. HTML und JSON enthalten verschachtelte Strukturen, und Regex kann diese Tiefe nicht zuverlässig verfolgen. Schon eine kleine Formatänderung bricht Ihr Muster unbemerkt. Nutzen Sie stattdessen den fertigen Parser Ihrer Sprache. Regex heben Sie für enge, klar definierte Aufgaben auf, etwa die Formatprüfung eines einzelnen Feldes.
  • Regex
  • reguläre Ausdrücke
  • Softwareentwicklung
  • Validierung
  • ReDoS
  • Programmieren lernen
Teilen:
Talha Aslan

Google Partner und Experte für digitales Marketing. Seit 2012 praktisch in SEO, Google Ads, Webdesign und E-Commerce Projekten; jeder Beitrag hier stammt aus dieser Erfahrung.

Nächstes Projekt

Angebot für Ihr Projekt.

Ihre Anfrage geht direkt an Talha Aslan und Team: Strategie von Talha, Umsetzung durch ein erfahrenes Team. Wir melden uns am selben Tag und senden Umfang, Zeitplan und Preis innerhalb von 1 Werktag als schriftliches Angebot.