Zum Inhalt springen

Regex: Einführung in reguläre Ausdrücke, Syntax und deren Verwendung

f7820e67eff84bce8225a12fc0df2bcc Regex: Einführung in reguläre Ausdrücke, Syntax und deren Verwendung

Reguläre Ausdrücke sind eine fantastische Möglichkeit, nach Mustern im Text zu suchen. Sie können verwendet werden, um Text zu finden und zu ersetzen, Daten zu analysieren, Eingaben zu überprüfen, Suchen durchzuführen und vieles mehr! In dieser kurzen Einführung in Regular Expressions erfahren Sie, was Sie über die Verwendung dieser Ausdrücke wissen müssen:

Regex (eine Abkürzung für regular expression, auf deutsch Regulärer Ausdruck) sind eine Art Filterkriterium, mit deren Hilfe man Zeichenketten analysieren und manipulieren kann. Sie sind in einer Vielzahl von Programmiersprachen (sed, awk, Perl, PHP,…) und Programmen (Editor vi, HTML-Editoren, OpenOffice,..) verfügbar. Manchmal werden Sie auch Pattern (Muster) genannt.

Achtung: In der theoretischen Informatik hat der Begriff „Regulärer Ausdruck“ eine exakt definierte, sehr eingeschränkte Bedeutung. Ein regulärer Ausdruck aus der Informatik kann fast nix, eine Regex in Perl oder PHP kann viel mehr. Nicht verwechseln! Besonders nicht bei der Prüfung!

pexels cottonbro 6804595 Regex: Einführung in reguläre Ausdrücke, Syntax und deren Verwendung

Manche Programmierer nennen RegEx auch scherzhaft „schreibgeschützten“ Code, denn reguläre Ausdrücke sind für andere (einschließlich des ursprünglichen Autors) nur sehr schwer oder fast gar nicht lesbar ist, nachdem diese einmal geschrieben wurden. Scherze wie diese rühren daher, dass reguläre Ausdrücke im Allgemeinen als überaus komplex und schwer verständlich wahrgenommen werden.

Was sind reguläre Ausdrücke und wie funktionieren sie?

Ein regulärer Ausdruck ist eine Folge von Buchstaben und Symbolen, die ein Suchmuster bilden. Man findet sie oft in Programmen, die Text bearbeiten oder suchen, um Zeichenfolgen oder Wörter zu finden. Reguläre Ausdrücke werden häufig in den Pattern-Matching-Systemen von Unix-ähnlichen Betriebssystemen sowie in vielen Programmiersprachen wie Python und C# verwendet.

Reguläre Ausdrücke sind im Grunde Abfolgen von Zeichen, die ein Suchmuster definieren. Sie können verwendet werden, um Text zu finden und zu ersetzen, Daten zu analysieren, Eingaben zu überprüfen, Suchen durchzuführen und vieles mehr!

Reguläre Ausdrücke können mit Mustern erstellt werden, die Metazeichen genannt werden. Metazeichen sind Symbole, die zur Definition des Suchmusters verwendet werden, aber für sich genommen keine wörtliche Bedeutung haben. Ein Sternchen (*) kann zum Beispiel für null oder mehr beliebige Zeichen stehen, wenn es in einem Muster für einen regulären Ausdruck verwendet wird.

Warum und wozu verwendet man RegEx?

Reguläre Ausdrücke werden für viele verschiedene Dinge verwendet. Sie können in Texteditoren verwendet werden, um Funktionen wie Suchen und Ersetzen oder Syntaxhervorhebung bereitzustellen. Reguläre Ausdrücke helfen Webentwicklern, Muster in URLs zu finden, damit sie wissen, ob ein Link auf eine bestehende Ressource auf dem Server verweist.

Programmierer/innen verwenden reguläre Ausdrücke oft, um Logdateien zu analysieren, die Daten über Fehler in ihren Anwendungen enthalten, ähnlich wie Antivirenprogramme nach Viren suchen, indem sie die Systemaktivitätsprotokolle untersuchen. Durch diese Art der Analyse können Programmierer/innen den Zeitpunkt und den Ort von Abstürzen innerhalb der Codebasis ihrer Software bestimmen, was es einfacher (und schneller) macht, Probleme zu beheben, die Nutzer/innen beim Ausführen ihrer Programme haben.

Hier ein paar einfache Beispiele:

Verschiedene Schreibweisen finden:

Spider[- ]?man

Dieser Ausdruck würde folgende Worte erkennen:

  • Spiderman
  • Spider man
  • Spider-man

Passwort prüfen:

^([A-Za-z0-9ÄÖÜäöüß]{6,250})$

Der Ausdruck erlaubt Passwörter mit sechs bis 250 Zeichen, welches Buchstaben aus dem Alphabet (in Groß und Kleinschreibung) sowie Umlaute (ebenfalls Groß und Klein) und „ß“ benutzt.

Anwendungsmöglichkeiten für reguläre Ausdrücke

Es gibt viele Anwendungsmöglichkeiten für reguläre Ausdrücke. Einige davon sind:

  • Suchen und Ersetzen von Text in Dateien;
  • Durchsuchen von Logdateien, um Fehler oder Ereignisse in der Datei zu finden;
  • Durchsuchen von großen Datenmengen, um bestimmte Dateien zu finden;
  • Validierung von Formularfeldern auf Websites (z. B. um sicherzustellen, dass sie nur Zahlen enthalten)
  • Extrahieren von Daten aus HTML-Seiten (oder anderen Arten von Markup), indem du Muster zwischen Tags findest.

Diese Art von Mustern ist sehr nützlich für die Überprüfung von Eingaben, da du vielleicht möchtest, dass alle Felder deines Formulars nur bestimmte Zeichen enthalten (z. B. Zahlen). Die zwei typische Anwendungen von Regexen sind das Suchen und das Ersetzen.

Um mit regulären Ausdrücken arbeiten zu können ist das Verständnis der Syntax die wichtigste Grundlage. Die wichtigsten Elemente der Syntax sind hier aufgelistet.

Reguläre Ausdrücke machen im Grunde zwei Dinge aus: Zum einen können durch bestimmte Zeichen Wiederholungen von Zeichen, Zeichenfolgen oder -klassen bestimmt werden, zum anderen können durch Zeichenklassen Ausdrücke verallgemeinert werden, so dass sie auf mehrere, verschiedene Zeichenfolgen zutreffen. Diese zwei Punkte sollen in diesem Artikel kurz beschrieben werden.

Beachte, dass die Syntax regulärer Ausdrücke sprachabhängig ist. Achte darauf, dass du die richtigen Regex-Muster für die Programmiersprache deiner Wahl verwendest, wenn du mit ihnen im Code arbeitest!

Suchen: Pattern Matching

Ich habe eine Variable mit viel Text, z.B. $text = "das kostet 7 Euro" und will rausfinden ob da ein Geldbetrag drin ist.

Die Schreibweise dafür in PHP würde wie folgt lauten:

if ( preg_match( ""/\d+ Euro/"", $text ) ) {
    echo ""ja, hier gibt es geld!"";
}

In Python:

import re
if re.search('\d+ Euro', text): 
    print "ja, hier gibt es geld!"

Wie man sieht wird in beiden Sprachen der Pattern selbst gleich geschreiben : \d+ Euro Nur das Drumherum ist anders. \d steht für eine Ziffer (also 0 oder 1 oder 2 …. oder 9). Das Plus dahinter bedeutet: ein oder mehrmals. Der Rest des Patterns ist einfach wörtlich zu nehmen.

Auf Deutsch übersetzt bedeuten die beiden Programme also:

Gibt es in der Variablen $text irgendwo eine oder mehrere Ziffern, gefolgt von einem Leerzeichen, gefogt von dem Wort Euro? Falls ja, dann gib den Text aus „ja, hier gibt es geld!“.

Ein paar Beispiele für $text:

$text = "999 Euro sind viel Geld"; #das matcht
$text = "999euro sind gleich viel geld"; #das matcht aus zwei gründen nicht: Das Leerzeichen fehlt und kleines e
$text = "2,5 Euro"; #das matcht nicht, weil das Komma stört
$text = "2 Euro und 50 cent"; #das matcht, ignoriert aber die cent!

Dieses Beispiel könnte man jetzt weiter entwickeln: Kommazahlen auch erkennen, den Betrag in einer Variable speichern, u.s.w. Aber zuerst die andere Anwendungsart von Regexen:

Suchen und Ersetzen – substitution

Ich habe eine Varible mit viel Text, z.B: $text = "die coolste Entwicklung des Jahres ist das Metaversum. Ohne das Metaversum ist kein Firmenauftritt mehr vorstellbar. In der Zukunft wird auch in der Bildung immer mehr das Metaversum eingesetzt werden"

In diesem Text will ich nun eine Ersetzung vornehmen. Wieder zwei Schreibweisen dafür aus zwei Programmiersprachen.

Zuerst in PHP:

$text = preg_replace("Metaversum", "Facebook", $text);

und in Python:

import re
re.sub("Metaversum", "Facebook", s)

Bei diesem einfachen Beispiel hätte man (in PHP) auch mit str_replace arbeiten können. Richtig cool wird die Sache erst, wenn man ein kompliziertes Pattern hat, das ersetzt wird.

Validierung von Formulareingaben

JavaScript hat keine eingebauten Funktionen, die zur Überprüfung von Benutzereingaben verwendet werden können, aber es ist durchaus möglich, eigene zu schreiben. Reguläre Ausdrücke sind eine großartige Möglichkeit, dies zu tun!

Hier ein Beispiel für ein Regex-Muster zur Überprüfung von E-Mail-Adressen in Python:

r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)"

Dieser reguläre Ausdruck prüft, ob die eingegebene Zeichenkette zwei Teile Name und Domain, bestehend aus erlaubten Buchstaben und Zahlen enthält (keine Sonderzeichen, mit Ausnahme des Minuszeichens -, dem Unterstrich _ einem Punkt . oder dem Pluszeichen +), dazwischen das @-Zeichen steht und mit einem Punkt, gefolgt von der Domain-Erweiterung (TLD) endet. Wenn eine dieser Regeln nicht erfüllt ist, gibt die Regex falsch zurück.

/^[a-z]+$/i

Dieser reguläre Ausdruck prüft, ob die eingegebene Zeichenkette nur Buchstaben enthält und nicht leer ist (mindestens ein Zeichen enthält). Ist dies nicht der Fall oder enthält die Eingabe andere, nicht alphanumerische Zeichen, wird auch dieses Muster falsch zurückgegeben. Beachte, dass wir auch ein /i-Flag hinzugefügt haben, um die Groß- und Kleinschreibung zu ignorieren – so können wir mit der gleichen Regex auf Klein- und Großbuchstaben prüfen!

Mit Mustern wie diesen kannst du beispielsweise auch Benutzereingaben überprüfen, bevor du Aktionen wie das Versenden einer E-Mail durchführst.

Syntax: Texte, Zahlen, Klassen

Die einfachsten Pattern bestehen genau aus den Zeichen die gesucht werden. Wenn man ein A suchen will benutzt man den Pattern /A/. Wenn man eine 1 suchen will benutzt man den Pattern /1/.

Dann gibt es ein paar praktische Abkürzungen:

  • \d eine Ziffer, also 1 oder 2 oder …. 9
  • \D keine Ziffer, also jedes andere zeichen ausser 1 oder 2 oder …. 9
  • \w Ein Wort-Zeichen, das sind kleine + grosse Buchstaben, Ziffern und der Unterstrich_
  • \W kein Wort-Zeichen
  • \s Ein Leerzeichen oder Tabulator
  • \S kein Leerzeichen oder Tabulator, also fast alle zeichen

Achtung: diese Abkürzungen matchen jeweils ein Zeichen. Wenn es mehrere sein sollen, kombiniert man diese:

/\d\d\d/ sucht eine dreistellige Zahl irgendwo im String.

Wiederholungen: Quantoren

Mit den folgenden sog. Quantoren, gibt man an, wie oft sich ein bestimmter Ausdruck wiederholen darf. Sie werden hinter einen Ausdruck geschrieben und geben dann an, wie oft dieser vorkommen darf:

  • ? : null- oder einmal , d.h. der Ausdruck ist optional
  • + : mindestens einmal
  • * : beliebig oft (auch keinmal)
  • {n} : genau n-mal
  • {min,max} : mindestens min-mal und maximal max-mal
  • {min,} : mindestens min-mal
  • {,max} : maximal max-mal

Beispiel: x?html passt auf html und xhtml

Beispiele

ZeichenBedeutung
a?a kommt kein- oder einmal vor.
a+a kommt mindestens einmal vor.
a*kommt kein oder mehrmals vor.
a{3}a kommt genau drei mal vor.
a{3,}a kommt mindestens drei mal vor.
a{,5}a kommt maximal fünf mal vor.
a{3,5}a kommt mindestens drei, aber maximal fünf mal vor.
^aDie Zeichenkette beginnt mit einem Text der auf a passt
ausdruck$Die Zeichenkette endet mit einem Text der auf ausdruck passt
^ab$Die Zeichenkette passt von Anfang bis Ende auf ab

Sollen mehrere verschiedene Zeichen angesprochen werden, muss um diese eine runde Klammer gesetzt werden: (ab)?würde folgendes bedeuten: ab kommt ein- oder keinmal vor.

Zeichenklassen

Zeichenklassen sind eine abkürzende Schreibweise für eine bestimmte Auswahl von Zeichen. Es stehen einige vordefinierte Zeichenklassen zur Auswahl. Diese sind oft abhängig von der Regex-Implementierung.

ZeichenBedeutung
.Jegliches Zeichen (Ausnahme der Zeilenumbruch, siehe auch bei den Modifiern)
A-ZABCDEFGHIJKLMNOPQRSTVWXYZ
a-zabcdefghijklmnopqrstvwxyz
0-9 oder \d0123456789
\wWort = Mindestens ein Buchstabe, eine Ziffer oder Unterstrich (Abkürzung für [a-zA-Z0-9_]).
\WKein Wort. Abkürzung für [^a-zA-Z0-9_]
\dZiffer (Abkürzung für [0-9]).
\Dkeine Ziffer (Abkürzung für [^0-9]).
\bWortgrenze (Position zwischen einem Wort und einem Leerzeichen).
\Bkeine Wortgrenze (Abkürzung für [^\b]).
\ss.g. Whitespaces, also Leerzeichen, Zeilenumbrüche, Tabulatoren etc. (Abkürzung für [\f\n\r\t\v\u00A0\u2028\u2029])
\Skein Whitespace (Abkürzung für [^\f\n\r\t\v\u00A0\u2028\u2029]).

Dies ist nur eine kleine Auswahl der wichtigsten Zeichenklassen.

POSIX-Klassen

In vielen Implementierungen sind auch diese Zeichenklassen verfügbar.

Klasse
[:alpha:]Buchstaben: [:lower:] und [:upper:]. Dies sind nicht nur lateinische Buchstaben.
[:lower:]Kleinbuchstaben
[:upper:]Großbuchstaben
[:digit:]Ziffern, entspricht [0-9]
[:alnum:]Ziffern und Buchstaben
[:blank:]Leerzeichen und Tabulator
[:space:]verschiedenste Leerzeichen, Tabulatoren, Zeilenumbrüche, Seitenvorschub, Wagenrücklauf, usw.
[:cntrl:]Steuerzeichen (nicht darstellbaren Zeichen)
[:print:]Druckbare Zeichen, entspricht [:alnum:], [:punct:] und [:blank:]
[:graph:]Druckbare Zeichen ohne [:blank:]
[:punct:]Satzzeichen und andere Zeichen: , – . ! „“ # $ % & ‚ ( ) { } [ ] * + / : ; < = > ? @ \ ^ _ ` | ~
[:xdigit:]Hexadezimale Ziffern, entspricht [0-9A-Fa-f]

Anfang und Ende von Strings

^ Anfang
$ Ende

Beispiel: ^Wort$

Populäre Regex Muster

Liste für häufige RegEx-Muster:

IPv4-Adresse

((\d|\d\d|[0-1]\d\d|2[0-4]\d|25[0-5])\.(\d|\d\d|[0-1]\d\d|2[0-4]\d|25[0-5])\.(\d|\d\d|[0-1]\d\d|2[0-4]\d|25[0-5])\.(\d|\d\d|[0-1]\d\d|2[0-4]\d|25[0-5]))

Domain

([A-Z0-9][A-Z0-9-]*)(\.[A-Z0-9][A-Z0-9-]*)+

Fünfstellige Postleitzahl in Deutschland

^\d{5}$

E-Mail Validierung

Das E-Mail-Regex-Muster „General Email Regex“ dient zur Analyse und Manipulation von E-Mailadressen. (RFC 5322 Official Standard)

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

Online-Tools für reguläre Ausdrücke

Zum Glück gibt einige tolle Online-Tools, mit denen du deine eigenen Ausdrücke testen kannst.

Zusammenfassung

Reguläre Ausdrücke sind eine fantastische Möglichkeit, nach Mustern im Text zu suchen. Sie können verwendet werden, um Text zu finden und zu ersetzen, Daten zu analysieren, Eingaben zu überprüfen, Suchen durchzuführen und vieles mehr! In diesem Artikel haben sie hoffentlich einen Eindruck davon bekommen, was man mit regulären Ausdrücken alles bewerkstelligen kann.

Wenn Sie alles wissen möchten oder einfach nur Fragen dazu haben, wie reguläre Ausdrücke bei Ihren speziellen Anforderungen funktionieren, sehen Sie sich unsere RegEx-Tutorials an, in denen wir auf verschiedene Anwendungsfälle der Syntax regulärer Ausdrücke näher eingehen. Wir bieten auch Tutorials speziell für Anfänger an. Wenn das alles neu für Sie ist, machen Sie sich keine Sorgen – es ist nicht so schwer, wie es auf den ersten Blick erscheinen mag!

Kai Spriestersbach