133 reguläre Ausdrücke
Von der Notation bis zur Prüfung von E-Mails, Daten und Adressen. Zu jedem Ausdruck gehören Beispiele, die passen sollen, und solche, die nicht passen dürfen — und die Tests führen sie wirklich aus.
Notation28
Wie man ein einzelnes Zeichen benennt. Alles andere baut darauf auf.
\deine Ziffer\Dalles außer einer Ziffer\wBuchstabe, Ziffer oder Unterstrich\Wkein Wortzeichen\sein Leerraumzeichen\Salles außer Leerraum^.$ein beliebiges Zeichen^[a-z]+$nur Kleinbuchstaben^[A-Z]+$nur Großbuchstaben^[A-Za-z0-9]+$nur Buchstaben und Ziffern^[^0-9]+$Text ganz ohne Ziffern^[가-힣]+$nur Hangeul^[ぁ-んァ-ヶー]+$nur Kana^[\u4e00-\u9fff]+$nur chinesische Zeichen^a\.b$ein echter Punkt^a/b$ein echter Schrägstrich\tein Tabulator\nein Zeilenumbruch\r\nein Windows-Zeilenende^\u00e9$ein per Codepunkt geschriebenes Zeichen^HelloText, der so beginntworld$Text, der so endet^cat$genau dieses Wort und sonst nichts\bcat\bdas Wort für sich, nicht in einem anderen\Bcatdas Wort nur innerhalb eines anderen^cat$ein Treffer ohne Rücksicht auf Groß- und Kleinschreibung^bder Anfang jeder Zeile, nicht nur des Texts^a.b$jedes Zeichen, auch ZeilenumbrücheWiederholung und Gruppen17
Wie oft sich etwas wiederholt und was als eine Einheit zählt.
^ab*c$keinmal oder mehrmals^ab+c$einmal oder öfter^colou?r$ein Buchstabe, der da sein kann^\d{4}$genau vier Ziffern^\d{2,4}$zwei bis vier Ziffern^\d{2,}$zwei Ziffern oder mehr<.+?>ein Tag, so kurz wie möglich^<.+>$ein Block, so lang wie möglich^(?:cat|dog)$eins von zwei Wörtern^(?:ab)+$eine Zweiergruppe, wiederholt^(\d{3})-(\d{4})$zwei Teile getrennt gefangen^(?:\d{3}-)+\d{4}$gruppieren ohne zu fangen^(?<year>\d{4})-(?<month>\d{2})$mit Namen fangen(\w)\1dasselbe Zeichen zweimal hintereinander\b(\w+)\s+\1\bdasselbe Wort doppelt getippt^(?:https?://)?example\.com$eine Adresse mit oder ohne Schema^(?:\d{1,3}\.){3}\d{1,3}$eine Adresse aus vier TeilenUmschauen8
Prüft, was davor oder dahinter steht, ohne es zu verbrauchen. Gut zum Stapeln von Bedingungen.
\d+(?= dollars)eine Zahl, auf die ein bestimmtes Wort folgt^(?!admin$).+$alles außer diesem einen Wort(?<=\$)\d+eine Zahl mit bestimmtem Zeichen davor(?<!\$)\b\d+eine Zahl ohne dieses Zeichen davor^(?=.*[A-Z])(?=.*\d)(?=.*[a-z]).{8,}$acht Zeichen mit Groß, Klein und Ziffer^(?!.* ).+$Text ohne doppeltes Leerzeichen^(?=.*@).+$Text, der dieses Zeichen enthalten muss\B(?=(\d{3})+(?!\d))die Stelle für das TausendertrennzeichenPrüfung der ganzen Zeichenkette44
An beiden Enden verankert — die ganze Zeichenkette muss passen. Das nutzt die Eingabeprüfung.
^[^\s@]+@[^\s@.]+(?:\.[^\s@.]+)+$eine E-Mail-Adresse^https?://[^\s/$.?#][^\s]*$eine Webadresse^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$ein Domainname^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)$eine IPv4-Adresse^(?:[0-9a-f]{1,4}:){7}[0-9a-f]{1,4}$eine voll ausgeschriebene IPv6-Adresse^(?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2}$eine MAC-Adresse^(?:6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]?\d{1,4})$eine Portnummer^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$eine UUID^#(?:[0-9a-f]{3}|[0-9a-f]{6})$ein Hex-Farbcode^rgb\(\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}\s*\)$ein rgb()-Farbwert^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$ein Datum im ISO-Format^(?:0[1-9]|[12]\d|3[01])/(?:0[1-9]|1[0-2])/\d{4}$ein Datum mit Schrägstrichen^(?:[01]\d|2[0-3]):[0-5]\d$eine Uhrzeit im 24-Stunden-Format^(?:0?[1-9]|1[0-2]):[0-5]\d\s?(?:am|pm)$eine Uhrzeit mit am oder pm^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$ein vollständiger ISO-Zeitstempel^P(?=\d|T\d)(?:\d+Y)?(?:\d+M)?(?:\d+D)?(?:T(?:\d+H)?(?:\d+M)?(?:\d+S)?)?$eine ISO-Dauer^\d+\.\d+\.\d+(?:-[0-9a-z.-]+)?(?:\+[0-9a-z.-]+)?$eine semantische Versionsnummer^\d+$eine ganze Zahl ohne Vorzeichen^[+-]?\d+$eine ganze Zahl mit möglichem Vorzeichen^-?\d+(?:\.\d+)?$eine Zahl mit möglichem Nachkommateil^-?\d+(?:\.\d+)?[eE][+-]?\d+$eine Zahl in Exponentialschreibweise^(?:100(?:\.0+)?|\d{1,2}(?:\.\d+)?)%$ein Prozentsatz von 0 bis 100^\d{1,3}(?:,\d{3})*$eine Zahl mit Tausendertrennzeichen^[$€£¥₩]\s?\d{1,3}(?:,\d{3})*(?:\.\d{2})?$ein Betrag mit Währungszeichen^[0-9a-f]+$eine Hexadezimalfolge^[01]+$eine Folge nur aus 0 und 1^[0-7]+$eine Oktalfolge^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$eine base64-codierte Zeichenfolge^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]*$ein JWT mit zwei Punkten^\+[1-9]\d{7,14}$eine Telefonnummer in internationaler Form^[a-z][a-z0-9_]{2,15}$ein Benutzername, der mit einem Buchstaben beginnt^[a-z0-9]+(?:-[a-z0-9]+)*$ein URL-Slug^[^\\/:*?"<>|]+\.[a-z0-9]+$ein Dateiname mit Endung^.+\.(?:jpe?g|png|gif|webp|avif|svg)$eine Bilddatei-Endung^/(?:[^/\0]+/)*[^/\0]*$ein Unix-Pfad^[A-Za-z]:\\(?:[^\\/:*?"<>|]+\\)*[^\\/:*?"<>|]*$ein Windows-Pfad^</?[a-z][a-z0-9]*(?:\s[^<>]*)?/?>$ein einzelnes HTML-Tag^\.-?[_a-z][_a-z0-9-]*$ein CSS-Klassenselektor^M{0,3}(?:CM|CD|D?C{0,3})(?:XC|XL|L?X{0,3})(?:IX|IV|V?I{0,3})$eine römische Zahl^-?(?:90(?:\.0+)?|[1-8]?\d(?:\.\d+)?)$ein Breitengrad^-?(?:180(?:\.0+)?|1[0-7]\d(?:\.\d+)?|\d{1,2}(?:\.\d+)?)$ein Längengrad^(?:0|[1-9]\d*)$eine Zahl ohne führende Null^\d*[02468]$eine gerade Zahl^\s*$eine leere ZeileFinden und säubern36
Um aus einem größeren Text genau das Gesuchte herauszuholen oder zu löschen.
\s+$Leerraum am Zeilenende^\s+Leerraum am Zeilenanfang^\s+|\s+$Leerraum an beiden Enden\s{2,}zwei oder mehr Leerzeichen hintereinander\n\s*\neine Leerzeile zwischen zwei Zeilen\D+alles, was keine Ziffer ist[^\x00-\x7F]ein Zeichen außerhalb von ASCII[\x00-\x1F]ein unsichtbares Steuerzeichen</?[^>]+>die HTML-Tags in einem Text<!--[\s\S]*?-->ein HTML-Kommentar//.*$ein Kommentar mit zwei Schrägstrichen/\*[\s\S]*?\*/ein mehrzeiliger Kommentar"[^"\\]*(?:\\.[^"\\]*)*"Text in doppelten Anführungszeichen'[^'\\]*(?:\\.[^'\\]*)*'Text in einfachen Anführungszeichen\[([^\]]+)\]\(([^)]+)\)ein Markdown-Link^#{1,6}\s+.+$eine Markdown-Überschrift(?:^|\s)#([a-z0-9_]+)ein Hashtag(?:^|\s)@([a-z0-9_]{2,})eine @-Erwähnung[?&]([^=&]+)=([^&]*)ein Query-Parameter in einer URLhttps?://[^\s<>"]+eine URL mitten im Text^https?://([^/:?#]+)nur die Domain aus einer URL\.([a-z0-9]+)$die Endung eines Dateinamens(?<=[a-z0-9])(?=[A-Z])die Naht zwischen Wörtern in camelCase_([a-z])der Buchstabe nach einem Unterstrich-([a-z])der Buchstabe nach einem Bindestrich(?:^|,)("(?:[^"]|"")*"|[^,]+)ein durch Komma getrenntes Feld^([^=]+)=(.*)$Name und Wert, getrennt durch ein Gleichheitszeichen^\s*(\S+)das erste Wort(\S+)\s*$das letzte Wort\d+Ziffernfolgen in einem Text\b\w+\bjedes Wort einzeln\[([^\]]*)\]was in eckigen Klammern steht\(([^)]*)\)was in runden Klammern steht[\uD800-\uDBFF][\uDC00-\uDFFF]ein Emoji aus zwei Codeeinheiten(.)\1{2,}dasselbe Zeichen dreimal oder öfter,\s*([}\]])ein Komma vor der schließenden KlammerSo liest man das
- Mit ^ und $ muss die ganze Zeichenkette passen; ohne sie darf der Treffer irgendwo sitzen. Verankern Sie alles, was Sie zur Prüfung einsetzen.
- Runde Klammern ( ) fangen, was sie umschließen. Wer nur gruppieren will, schreibt (?: ) — sonst verschiebt sich die Nummerierung.
- Jeder Ausdruck hier wird gegen seine Beispiele geprüft. Trotzdem sind „sieht aus wie eine E-Mail“ und „ist ein echtes Postfach“ zweierlei.
- Verschachtelte offene Wiederholungen wie (a+)+ können bei manchen Eingaben explodieren. Achten Sie auf diese Form, bevor Sie fremde Ausdrücke übernehmen.
Häufige Fragen
Q. Was ist ein regulärer Ausdruck?
Eine kleine Sprache, um eine gesuchte Form in Text zu beschreiben. Statt „vier Ziffern“ schreibt man \d{4}, und das Programm findet jede Stelle dieser Form. JavaScript, Python, Java und die meisten anderen nutzen fast dieselbe Notation.
Q. Warum ist die E-Mail-Prüfung so kurz?
Ein Muster nach vollem Standard umfasst Tausende Zeichen und sagt trotzdem nicht, ob das Postfach existiert. Tippfehler abfangen kann ein regulärer Ausdruck; die einzige echte Prüfung ist eine Bestätigungsmail.
Q. Warum unterscheiden sich Muster je nach Sprache?
Der Kern ist gleich, die Details nicht. JavaScript kennt kein \A, Python braucht re.MULTILINE separat. Alles hier ist so geschrieben, dass es in JavaScript unverändert läuft.
Q. Was heißt, ein Muster könne langsam sein?
Verschachteln sich offene Wiederholungen wie in (a+)+, explodiert bei nicht passender Eingabe die Zahl der Rücksprünge. Dann dauert schon eine kurze Zeichenkette Sekunden — auf einem Server gefährlich.
Q. Kann ich diesen Mustern trauen?
Zu jedem gehören Beispiele, die passen müssen, und solche, die nicht passen dürfen; die Tests führen alle 133 wirklich aus. Die Beispiele auf der Seite sind dieselben wie im Test — Beschreibung und Muster können nicht auseinanderlaufen.