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.
Notation36
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üche^\p{L}+$Buchstaben aus jeder Schrift^\p{Extended_Pictographic}+$nur Piktogramme^[\u0400-\u04FF]+$nur kyrillische Buchstaben^\x41$ein Zeichen als Hex-Escape^[ㄱ-ㅎㅏ-ㅣ]+$nur Hangul-Jamo^[-]+$nur thailändische Schrift^[-ۿ]+$nur arabische Schrift^[0-9]+$nur Vollbreiten-ZiffernWiederholung und Gruppen24
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 Teilen^\d{0,3}$höchstens drei Ziffern^\w{3,8}$zwischen drei und acht Wortzeichen^(?:\w+\.){2}\w+$drei durch Punkte getrennte Teile^/[a-z]+/?$ein Pfad, dessen Schrägstrich am Ende optional ist^(cat|dog)$genau eines von zwei Wörtern^(ab){3}$eine Gruppe genau dreimal^[a-c]{2,4}$zwei bis vier Zeichen aus einer MengeUmschauen14
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 Tausendertrennzeichen^(?!.*(.)\1).+$kein Zeichen direkt hintereinander wiederholt(?<=₩)\d+Ziffern nach dem Won-Zeichen^(?!.*\btest\b).*$eine Zeile ohne ein bestimmtes Wort^(?!test)\w+$was nicht mit einem Wort beginnt^.*(?<=\.png)$was auf eine Endung ausgeht^(?!.*\d\d).*$Text ohne zwei Ziffern hintereinanderPrüfung der ganzen Zeichenkette66
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 Zeile^\d{4}-W(?:0[1-9]|[1-4]\d|5[0-3])$eine ISO-Wochennummer, bis Woche 53^#(?:[0-9a-f]{4}|[0-9a-f]{8})$eine Hex-Farbe mit Alphakanal^\d{4}(?:[ -]?\d{4}){3}$eine Kartennummer in vier Viererblöcken^[A-Z]{3}$ein dreibuchstabiger Währungscode^0x[0-9a-f]+$eine Hexzahl mit dem Präfix 0x^[0-9a-f]{64}$ein Hash aus vierundsechzig Zeichen^[0-9a-f]{24}$eine Dokument-ID aus vierundzwanzig Zeichen^\d{5}$eine fünfstellige Postleitzahl^[A-Z]{2}$ein zweibuchstabiger Ländercode^(\d{1,3}\.){3}\d{1,3}/\d{1,2}$eine IPv4-Adresse mit CIDR-Präfix^01[016789]-?\d{3,4}-?\d{4}$eine koreanische Mobilnummer^[가-힣]{2,5}$ein Hangul-Name aus zwei bis fünf Silben^\d{5}(-\d{4})?$eine US-Postleitzahl^([0-9a-fA-F]{1,4}(:[0-9a-fA-F]{1,4})*)?::([0-9a-fA-F]{1,4}(:[0-9a-fA-F]{1,4})*)?$eine gekürzte IPv6-Adresse^\d{3}-\d{2}-\d{5}$eine koreanische Gewerbenummer^[a-z]+\/[a-zA-Z0-9][a-zA-Z0-9.+-]*$ein MIME-Typ^data:[a-z]+\/[a-z0-9.+-]+;base64,[A-Za-z0-9+/]+=*$eine base64-Data-URI^(\S+\s+){4}\S+$ein Cron-Ausdruck mit fünf Feldern^[A-Za-z]:\\.*$ein Windows-Laufwerkspfad^[\^~]?\d+\.\d+\.\d+$ein Semver-Bereich mit ^ oder ~^(10\.\d{1,3}\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3}|172\.(1[6-9]|2\d|3[01])\.\d{1,3}\.\d{1,3})$ein privater IPv4-Bereich^[A-Z][a-zA-Z0-9]*$ein Name in PascalCaseFinden und säubern49
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 Klammer\*\*([^*]+)\*\*fetter Text zwischen zwei Sternchen`([^`]+)`Code zwischen Backticks(\w+)="([^"]*)"ein Attribut, dessen Wert in Anführungszeichen steht\x1b\[[0-9;]*mein Escape-Code für Terminalfarbenfrom ['\"]([^'\"]+)['\"]der Pfad in einer Import-Anweisung#[0-9a-fA-F]{6}\bein Hex-Farbwert im FließtextTODO:?\s*(.*)eine TODO-Notiz im Kommentar\d+(px|em|rem|%)eine Zahl mit CSS-Einheit!\[([^\]]*)\]\(([^)]+)\)ein Markdown-Bild^[-*+]\s+(.+)$ein Markdown-Listenpunkt--[^\n]*ein SQL-Zeilenkommentar\$\{?([A-Z_][A-Z0-9_]*)\}?eine Shell-Umgebungsvariable[A-Za-z0-9_-]{11}eine YouTube-Video-IDSo 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
QWas 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.
QWarum 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.
QWarum 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.
QWas 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.
QKann 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.