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:
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
- Basic Matchers
- Meta-Zeichen
- 2.1 Punkt
- 2.2 Zeichensatz
- 2.2.1 Negierter Zeichensatz
- 2.3 Wiederholungen
- 2.3.1 Der Stern
- 2.3.2 Das Plus
- 2.3.3 Das Fragezeichen
- 2.4 Klammern
- 2.5 Zeichengruppe
- 2.6 Alternation
- 2.7 Escape-Sonderzeichen
- 2.8 Anker
- 2.8.1 Caret
- 2.8.2 Dollar
- Shorthand-Zeichensätze
- Lookaround
- 4.1 Positiver Lookahead
- 4.2 Negativer Lookahead
- 4.3 Positives Lookbehind
- 4.4 Negatives Lookbehind
- Flags
- 5.1 Groß-/Kleinschreibung nicht berücksichtigen
- 5.2 Globale Suche
- 5.3 Mehrzeilig
- Greedy vs. Lazy Matching
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 Buchstabet
, 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 i
Modifikator 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.