Start·Reguläre Ausdrücke

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.

Wiederholung und Gruppen17

Wie oft sich etwas wiederholt und was als eine Einheit zählt.

Umschauen8

Prüft, was davor oder dahinter steht, ohne es zu verbrauchen. Gut zum Stapeln von Bedingungen.

Prü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 Zeile

Finden 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 Klammer

So 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.