PDF herunterladen

Reguläre Ausdrücke sind eine Gruppe von Zeichen oder Symbolen, die verwendet werden, um ein bestimmtes Muster in einem Text zu finden; man kann sie als Platzhalter auf Steroiden bezeichnen, wenn man so will. Als Entwickler kann die Beherrschung regulärer Ausdrücke ein mächtiges Werkzeug in Ihrem Werkzeuggürtel sein; Sie werden sie auf jeden Fall irgendwann in Ihren Programmen verwenden müssen, Suchen und Ersetzen mit regulären Ausdrücken in IDEs ist manchmal wirklich praktisch, und ich selbst verwende sie jeden Tag in der Kommandozeile.

Unterschiedliche Anwendungen und Programmiersprachen haben vielleicht unterschiedliche Implementierungen für reguläre Ausdrücke, aber die zugrundeliegenden Konzepte sind meist die gleichen. In diesem Beitrag erkläre ich Ihnen alles, was Sie über reguläre Ausdrücke wissen müssen.

Ein regulärer Ausdruck ist ein Muster, das mit einer Zeichenkette von links nach rechts abgeglichen wird. Das Wort „Regulärer Ausdruck“ ist sehr langatmig, man findet den Begriff meist abgekürzt als „regex“ oder „regexp“. Reguläre Ausdrücke werden verwendet, um einen Text in einer Zeichenkette zu ersetzen, ein Formular zu validieren, eine Teilzeichenkette aus einer Zeichenkette zu extrahieren, die auf einer Musterübereinstimmung basiert, und vieles mehr.

Stellen Sie sich vor, Sie schreiben eine Anwendung und möchten die Regeln festlegen, nach denen ein Benutzer seinen Benutzernamen auswählt. Der Benutzername soll Buchstaben, Zahlen, Unterstriche und Bindestriche enthalten dürfen. Wir möchten auch die Anzahl der Zeichen im Benutzernamen begrenzen, damit er nicht unschön aussieht. Wir verwenden den folgenden regulären Ausdruck, um einen Benutzernamen zu überprüfen:

Regulärer Ausdruck

Der obige reguläre Ausdruck kann die Zeichenfolgen john_doe, jo-hn_doe und john12_as akzeptieren. Er passt nicht auf Jo, da diese Zeichenfolge Großbuchstaben enthält und außerdem zu kurz ist.

Inhaltsverzeichnis

  • Grundübereinstimmungen
  • Meta-Zeichen
  • Ganzer Punkt
  • Zeichensatz
  • Negierter Zeichensatz
  • Wiederholungen
  • Der Stern
  • Das Plus
  • Das Fragezeichen
  • Zeichenreihen
  • Zeichengruppe
  • Alternation
  • Ausweichendes Sonderzeichen
  • Anker
  • Caret
  • Dollar
  • Kurzzeichensätze
  • Rückwärtssuche
  • Positive Rückwärtssuche
  • Negative Rückwärtssuche
  • Positive Rückwärtssuche
  • Marken
  • Groß-/Kleinschreibung nicht beachten
  • Globale Suche
  • Multiline
  • Greedy vs. Lazy Matching

Basic Matchers

Ein regulärer Ausdruck ist nur ein Muster von Zeichen, das wir verwenden, um eine
Suche in einem Text durchzuführen. Der reguläre Ausdruck the bedeutet zum Beispiel: der Buchstabe
t, gefolgt von dem Buchstaben h, gefolgt von dem Buchstaben e.

the => The fat cat sat on the mat.

Testen Sie den regulären Ausdruck

Der reguläre Ausdruck 123 passt auf die Zeichenfolge 123. Der reguläre Ausdruck wird mit einer Eingabezeichenkette abgeglichen, indem jedes Zeichen des regulären
Ausdrucks mit jedem Zeichen der Eingabezeichenkette verglichen wird, eines nach dem anderen. Reguläre
Ausdrücke unterscheiden normalerweise zwischen Groß- und Kleinschreibung, so dass der reguläre Ausdruck The nicht mit der Zeichenkette the übereinstimmen würde.

The => The fat cat sat on the mat.

Testen Sie den regulären Ausdruck

Meta-Zeichen

Meta-Zeichen sind die Bausteine der regulären Ausdrücke. Meta
Zeichen stehen nicht für sich selbst, sondern werden auf eine
besondere Weise interpretiert. Einige Metazeichen haben eine besondere Bedeutung und werden in eckige Klammern geschrieben. Die Metazeichen sind wie folgt:

2.1 Punkt

Der Punkt . ist das einfachste Beispiel für ein Metazeichen. Das Metazeichen .
passt auf jedes einzelne Zeichen. Es passt nicht auf Return- oder Newline-Zeichen.
Zum Beispiel bedeutet der reguläre Ausdruck .ar: ein beliebiges Zeichen, gefolgt von dem Buchstaben a, gefolgt von dem Buchstaben r.

.ar => The car parked in the garage.

Testen Sie den regulären Ausdruck

2.2 Zeichensatz

Zeichensätze werden auch Zeichenklasse genannt. Eckige Klammern werden verwendet, um
Zeichensätze zu spezifizieren. Verwenden Sie einen Bindestrich innerhalb eines Zeichensatzes, um den Bereich der Zeichen anzugeben. Die Reihenfolge des Zeichensatzes innerhalb der eckigen Klammern
spielt keine Rolle. Der reguläre Ausdruck he bedeutet zum Beispiel: ein Großbuchstabe T oder ein Kleinbuchstabe t, gefolgt von dem Buchstaben h, gefolgt von dem Buchstaben e.

he => The car parked in the garage.

Testen Sie den regulären Ausdruck

Ein Punkt innerhalb eines Zeichensatzes bedeutet jedoch einen wörtlichen Punkt. Der reguläre
Ausdruck ar bedeutet: ein Kleinbuchstabe a, gefolgt vom Buchstaben r,
gefolgt von einem Punkt .Zeichen.

ar => A garage is a good place to park a car.

Testen Sie den regulären Ausdruck

2.2.1 Negierter Zeichensatz

Im Allgemeinen steht das Caret-Symbol für den Anfang der Zeichenkette, aber wenn es
nach der öffnenden eckigen Klammer eingegeben wird, negiert es den Zeichensatz. Zum
Beispiel bedeutet der reguläre Ausdruck ar: jedes Zeichen außer c,
gefolgt von dem Zeichen a, gefolgt von dem Buchstaben r.

ar => The car parked in the garage.

Test des regulären Ausdrucks

2.3 Wiederholungen

Die folgenden Meta-Zeichen +, * oder ? werden verwendet, um anzugeben, wie oft ein Teilmuster vorkommen kann. Diese Meta-Zeichen wirken in verschiedenen
Situationen unterschiedlich.

2.3.1 Der Stern

Das Symbol * passt auf null oder mehr Wiederholungen des vorhergehenden Matchers. Der reguläre Ausdruck a* bedeutet: null oder mehr Wiederholungen des vorangehenden Kleinbuchstabens a. Wenn er jedoch nach einem Zeichensatz oder einer Klasse erscheint, findet er die Wiederholungen des gesamten Zeichensatzes. Zum Beispiel bedeutet der reguläre Ausdruck *: eine beliebige Anzahl von Kleinbuchstaben in einer Reihe.

* => The car parked in the garage #21.

Testen Sie den regulären Ausdruck

Das Symbol * kann mit dem Metazeichen . verwendet werden, um eine beliebige Folge von
Zeichen .* zu finden. Das Symbol * kann mit dem Leerzeichen \s
verwendet werden, um eine Kette von Leerzeichen zu finden. Zum Beispiel bedeutet der Ausdruck
\s*cat\s*: null oder mehr Leerzeichen, gefolgt von dem Kleinbuchstaben c,
gefolgt von dem Kleinbuchstaben a, gefolgt von dem Kleinbuchstaben t, gefolgt von null oder mehr Leerzeichen.

\s*cat\s* => The fat cat sat on the concatenation.

Testen Sie den regulären Ausdruck

2.3.2 Das Plus

Das Symbol + passt auf eine oder mehrere Wiederholungen des vorhergehenden Zeichens. Zum Beispiel bedeutet der reguläre Ausdruck c.+t: Kleinbuchstabe c, gefolgt von mindestens einem Zeichen, gefolgt von dem Kleinbuchstaben t. Es muss klargestellt werden, dass t das letzte t im Satz ist.

c.+t => The fat cat sat on the mat.

Testen Sie den regulären Ausdruck

2.3.3 Das Fragezeichen

In regulären Ausdrücken macht das Metazeichen ? das vorhergehende Zeichen
optional. Dieses Symbol passt auf null oder eine Instanz des vorangehenden Zeichens. Zum Beispiel bedeutet der reguläre Ausdruck ?he: Optional der Großbuchstabe T, gefolgt von dem Kleinbuchstaben h, gefolgt von dem Kleinbuchstaben e.

he => The car is parked in the garage.

Test des regulären Ausdrucks

?he => The car is parked in the garage.

Test des regulären Ausdrucks

2.4 Klammern

In regulären Ausdrücken werden Klammern, die auch Quantifizierer genannt werden, verwendet, um
die Anzahl der Wiederholungen eines Zeichens oder einer Gruppe von Zeichen festzulegen. Der reguläre Ausdruck {2,3} bedeutet zum Beispiel: Finde mindestens 2 Ziffern, aber nicht mehr als 3 (Zeichen im Bereich von 0 bis 9).

{2,3} => The number was 9.9997 but we rounded it off to 10.0.

Teste den regulären Ausdruck

Wir können die zweite Zahl weglassen. Zum Beispiel bedeutet der reguläre Ausdruck
{2,}: Finde 2 oder mehr Ziffern. Wenn wir auch das Komma weglassen, bedeutet der reguläre Ausdruck
{3}: Finde genau 3 Ziffern.

{2,} => The number was 9.9997 but we rounded it off to 10.0.

Teste den regulären Ausdruck

{3} => The number was 9.9997 but we rounded it off to 10.0.

Teste den regulären Ausdruck

2.5 Zeichengruppe

Die Zeichengruppe ist eine Gruppe von Untermustern, die in Klammern (…) geschrieben wird. Wie wir bereits besprochen haben, wird in regulären Ausdrücken, wenn wir einen Quantifizierer nach einem Zeichen setzen, das vorangehende Zeichen wiederholt. Wenn wir jedoch einen Quantifizierer nach einer Zeichengruppe setzen, wird die gesamte Zeichengruppe wiederholt. Zum Beispiel passt der reguläre Ausdruck (ab)* auf null oder mehr Wiederholungen des Zeichens ab. Wir können auch das Metazeichen | innerhalb einer Zeichengruppe verwenden. Zum Beispiel bedeutet der reguläre Ausdruck (c|g|p)ar: Kleinbuchstaben c, g oder p, gefolgt von Zeichen a, gefolgt von Zeichen r.

(c|g|p)ar => The car is parked in the garage.

Testen Sie den regulären Ausdruck

2.6 Alternation

In regulären Ausdrücken wird der vertikale Balken | verwendet, um Alternation zu definieren. Alternation ist wie eine Bedingung zwischen mehreren Ausdrücken. Sie denken jetzt vielleicht, dass Zeichensatz und Alternation auf die gleiche Weise funktionieren. Der große Unterschied zwischen Zeichensatz und Alternation besteht jedoch darin, dass der Zeichensatz auf Zeichenebene arbeitet, die Alternation jedoch auf Ausdrucksebene. Der reguläre Ausdruck (T|t)he|car bedeutet zum Beispiel: Großbuchstabe T oder Kleinbuchstabe t, gefolgt von Kleinbuchstabe h, gefolgt von Kleinbuchstabe e oder Kleinbuchstabe c, gefolgt von Kleinbuchstabe a, gefolgt von Kleinbuchstabe r.

(T|t)he|car => The car is parked in the garage.

Test des regulären Ausdrucks

2.7 Escape-Sonderzeichen

Backslash \ wird in regulären Ausdrücken verwendet, um das nächste Zeichen zu escapen. Dies
erlaubt es uns, ein Symbol als übereinstimmendes Zeichen anzugeben, einschließlich reservierter
Zeichen { } / \ + * . $ ^ | ?. Um ein spezielles Zeichen als übereinstimmendes Zeichen zu verwenden, wird \ vorangestellt.

Der reguläre Ausdruck . wird zum Beispiel verwendet, um jedes Zeichen außer
Newline zu finden. Um nun . in einer Eingabezeichenkette zu finden, bedeutet der reguläre Ausdruck (f|c|m)at\.?: Kleinbuchstabe f, c oder m, gefolgt von Kleinbuchstabe
Zeichen a, gefolgt von Kleinbuchstabe t, gefolgt von optionalem Zeichen ..

(f|c|m)at\.? => The fat cat sat on the mat.

Testen Sie den regulären Ausdruck

2.8 Anker

In regulären Ausdrücken verwenden wir Anker, um zu prüfen, ob das übereinstimmende Symbol das
Anfangssymbol oder das Endsymbol der Eingabekette ist. Es gibt zwei Arten von Ankern: Der erste Typ ist Caret ^, der prüft, ob das übereinstimmende Zeichen das erste
Zeichen der Eingabe ist, und der zweite Typ ist Dollar $, der prüft, ob das übereinstimmende
Zeichen das letzte Zeichen der Eingabe ist.

2.8.1 Caret

Caret ^ wird verwendet, um zu prüfen, ob das übereinstimmende Zeichen das erste Zeichen
der Eingabe ist. Wenn wir den folgenden regulären Ausdruck ^a (wenn a
das Anfangssymbol ist) auf die Eingabezeichenkette abc anwenden, passt er zu a. Wenden wir jedoch den regulären Ausdruck ^b auf die obige Eingabezeichenkette an, gibt es keine Übereinstimmung. Denn in der Eingabezeichenfolge abc ist b nicht das Anfangssymbol. Schauen wir uns einen anderen regulären Ausdruck ^(T|t)he an, der bedeutet: Großbuchstabe T oder Kleinbuchstabe t ist das Startsymbol der Eingabezeichenfolge, gefolgt von
Kleinbuchstabe h, gefolgt von Kleinbuchstabe e.

(T|t)he => The car is parked in the garage.

Test des regulären Ausdrucks

^(T|t)he => The car is parked in the garage.

Test des regulären Ausdrucks

2.8.2 Dollar

Das Dollar-Symbol $ wird verwendet, um zu prüfen, ob das übereinstimmende Zeichen das letzte Zeichen
des Eingabe-Strings ist. Zum Beispiel bedeutet der reguläre Ausdruck (at\.)$: ein Kleinbuchstabe a, gefolgt von einem Kleinbuchstaben t, gefolgt von einem .-Zeichen und das übereinstimmende Zeichen muss am Ende der Zeichenkette stehen.

(at\.) => The fat cat. sat. on the mat.

Test des regulären Ausdrucks

(at\.)$ => The fat cat. sat. on the mat.

Test des regulären Ausdrucks

Shorthand-Zeichensätze

Der reguläre Ausdruck bietet Shorthands für häufig verwendete Zeichensätze, die bequeme Shorthands für häufig verwendete reguläre Ausdrücke bieten. Die Shorthand-Zeichensätze sind wie folgt:

Lookaround

Lookbehind und Lookahead (auch Lookaround genannt) sind spezielle Arten von
nicht übereinstimmenden Gruppen (die verwendet werden, um das Muster zu finden, aber nicht in der übereinstimmenden Liste enthalten sind). Lookaheads werden verwendet, wenn die Bedingung besteht, dass diesem Muster ein anderes bestimmtes Muster vorausgeht oder folgt. Wir wollen zum Beispiel alle Zahlen, denen das Zeichen $ vorausgeht, aus der folgenden Eingabezeichenkette .44 and .88 erhalten. Wir verwenden den folgenden regulären Ausdruck (?<=$)*, der bedeutet: Ermittelt alle Zahlen, die das Zeichen . enthalten und denen das Zeichen $ vorausgeht. Nachfolgend die Lookarounds, die in regulären Ausdrücken verwendet werden:

4.1 Positiver Lookahead

Der positive Lookahead besagt, dass dem ersten Teil des Ausdrucks der Lookahead-Ausdruck
folgen muss. Die zurückgegebene Übereinstimmung enthält nur den Text, der mit dem ersten Teil des Ausdrucks übereinstimmt. Um einen positiven
Vorausschauausdruck zu definieren, werden Klammern verwendet. Innerhalb dieser Klammern wird ein Fragezeichen mit Gleichheitszeichen wie folgt verwendet: (?=…). Der Lookahead-Ausdruck wird nach dem Gleichheitszeichen innerhalb der Klammern geschrieben. Zum Beispiel bedeutet der reguläre Ausdruck
(T|t)he(?=\sfat): wahlweise Übereinstimmung mit dem Kleinbuchstaben t oder dem Großbuchstaben T, gefolgt vom Buchstaben h, gefolgt vom Buchstaben e. In Klammern wird ein positiver Lookahead definiert, der der Maschine für reguläre Ausdrücke sagt, dass sie auf The oder the passen soll, auf die das Wort fat folgt.

(T|t)he(?=\sfat) => The fat cat sat on the mat.

Test des regulären Ausdrucks

4.2 Negativer Lookahead

Negativer Lookahead wird verwendet, wenn wir alle Übereinstimmungen aus der Eingabezeichenkette
erhalten wollen, die nicht von einem Muster gefolgt werden. Negativer Lookahead ist genauso definiert wie positiver Lookahead, aber der einzige Unterschied ist, dass wir anstelle des Gleichheitszeichens = die Negation ! verwenden, d.h. (?!…). Schauen wir uns den folgenden regulären Ausdruck (T|t)he(?!\sfat) an, der bedeutet: alle The oder the Wörter aus dem Eingabe-String zu erhalten, die nicht von dem Wort fat gefolgt werden, dem ein Leerzeichen vorausgeht.

(T|t)he(?!\sfat) => The fat cat sat on the mat.

Testen Sie den regulären Ausdruck

4.3 Positives Lookbehind

Positives Lookbehind wird verwendet, um alle Übereinstimmungen zu erhalten, denen ein
-spezifisches Muster vorausgeht. Positives Lookbehind wird mit (?<=…) bezeichnet. Zum Beispiel bedeutet der reguläre Ausdruck (?<=(T|t)he\s)(fat|mat): Ermittelt alle fat oder mat Wörter der Eingabezeichenfolge, die nach dem Wort The oder the stehen.

(?<=(T|t)he\s)(fat|mat) => The fat cat sat on the mat.

Test des regulären Ausdrucks

4.4 Negatives Lookbehind

Negatives Lookbehind wird verwendet, um alle Übereinstimmungen zu ermitteln, denen kein
spezifisches Muster vorausgeht. Negatives Lookbehind wird durch (?<!…) gekennzeichnet. Der reguläre Ausdruck (?<!(T|t)he\s)(cat) bedeutet zum Beispiel: holt alle cat Wörter aus der Eingabezeichenkette, die nicht nach dem Wort The oder the stehen.

(?<!(T|t)he\s)(cat) => The cat sat on cat.

Test des regulären Ausdrucks

Flags

Flags werden auch Modifikatoren genannt, weil sie die Ausgabe eines regulären
Ausdrucks verändern. Diese Flags können in beliebiger Reihenfolge oder Kombination verwendet werden und sind ein
integraler Bestandteil des RegExp.

5.1 Groß-/Kleinschreibung nicht berücksichtigen

Der iModifikator wird verwendet, um die Groß-/Kleinschreibung nicht zu berücksichtigen. Der reguläre Ausdruck /The/gi bedeutet zum Beispiel: Großbuchstabe T, gefolgt von Kleinbuchstabe h, gefolgt von Buchstabe e. Und am Ende des regulären Ausdrucks weist das Kennzeichen i die Engine für reguläre Ausdrücke an, die Groß- und Kleinschreibung zu ignorieren. Wie Sie sehen können, haben wir auch das g-Flag angegeben, weil wir nach dem Muster in der gesamten Eingabezeichenkette suchen wollen.

The => The fat cat sat on the mat.

Test des regulären Ausdrucks

/The/gi => The fat cat sat on the mat.

Test des regulären Ausdrucks

5.2 Globale Suche

Der g-Modifikator wird verwendet, um eine globale Übereinstimmung durchzuführen (alle Übereinstimmungen zu finden, anstatt nach der ersten Übereinstimmung aufzuhören). Zum Beispiel bedeutet der reguläre Ausdruck /.(at)/g : jedes Zeichen außer Zeilenumbruch, gefolgt von Kleinbuchstaben a, gefolgt von Kleinbuchstaben t. Da wir das g-Flag am Ende des regulären Ausdrucks angegeben haben, werden nun alle Übereinstimmungen in der Eingabezeichenkette gefunden, nicht nur die erste (was das Standardverhalten ist).

/.(at)/ => The fat cat sat on the mat.

Test des regulären Ausdrucks

/.(at)/g => The fat cat sat on the mat.

Test des regulären Ausdrucks

5.3 Mehrzeilig

Der m-Modifikator wird verwendet, um eine mehrzeilige Übereinstimmung durchzuführen. Wie wir bereits besprochen haben, werden
Anker (^, $) verwendet, um zu prüfen, ob das Muster am Anfang oder am Ende des Eingabe-Strings steht. Aber wenn wir wollen, dass die Anker in jeder Zeile funktionieren, verwenden wir das Flag
m. Zum Beispiel bedeutet der reguläre Ausdruck /at(.)?$/gm: Kleinbuchstabe
Zeichen a, gefolgt von Kleinbuchstabe t, optional alles außer
neue Zeile. Und wegen des m-Flags passt die Engine für reguläre Ausdrücke jetzt das Muster am Ende jeder Zeile in einer Zeichenkette an.

/.at(.)?$/ => The fat
cat sat
on the mat.

Test des regulären Ausdrucks

"/.at(.)?$/gm" => The fat
cat sat
on the mat.

Test des regulären Ausdrucks

Greedy vs. Lazy Matching

Standardmäßig führt regex ein greedy Matching durch, d.h. es passt so lange wie
möglich. Wir können ? verwenden, um so kurz wie möglich abzugleichen

/(.*at)/ => The fat cat sat on the mat.

Testen Sie den regulären Ausdruck

/(.*?at)/ => The fat cat sat on the mat.

Testen Sie den regulären Ausdruck

Und damit ist dieser Beitrag zu Ende. Ich hoffe, dieser Beitrag war hilfreich. Stellen Sie sicher, dass Sie das Gelernte mit Hilfe von Diensten wie regexr.com oder regex101.com üben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.