Regular Expressions
Charakterklassen
Suche…
Bemerkungen
Einfache Klassen
Regex | Streichhölzer |
---|---|
[abc] | Jedes der folgenden Zeichen: a , b oder c |
[az] | Jedes Zeichen von a bis z , inklusive (dies wird als ein Bereich) |
[0-9] | Jede Ziffer von 0 bis einschließlich 9 |
Gemeinsame Klassen
Einige Gruppen / Zeichenbereiche werden so oft verwendet, dass sie spezielle Abkürzungen haben:
Regex | Streichhölzer |
---|---|
\w | Alphanumerische Zeichen plus Unterstrich (auch "Wortzeichen" genannt) |
\W | Nicht-Wort-Zeichen (wie [^\w] ) |
\d | Ziffern ( breiter als [0-9] da persische Ziffern, indische usw. enthalten sind) |
\D | Nicht-Ziffern ( kürzer als [^0-9] da persische Ziffern abgelehnt werden, indische usw.) |
\s | Leerzeichen (Leerzeichen, Tabulatoren usw.) Hinweis : kann je nach Engine / Kontext variieren |
\S | Zeichen, die keine Leerzeichen sind |
Klassen negieren
Ein Caret (^) nach der öffnenden eckigen Klammer wirkt als Negation der nachfolgenden Zeichen. Dies entspricht allen Zeichen, die nicht zur Zeichenklasse gehören.
Negierte Zeichenklassen stimmen auch mit Zeilenumbruchzeichen überein. Wenn diese nicht übereinstimmen sollen, müssen die spezifischen Zeilenumbruchzeichen der Klasse hinzugefügt werden (\ r und / oder \ n).
Regex | Streichhölzer |
---|---|
[^AB] | Jedes andere Zeichen als A und B |
[^\d] | Jedes Zeichen außer Ziffern |
Die Grundlagen
Angenommen, wir haben eine Liste von Teams, die wie folgt benannt werden: Team A
, Team B
, ..., Team Z
Dann:
-
Team [AB]
: Dies entspricht entwederTeam A
oderTeam B
-
Team [^AB]
: Dies passt zu jedem Team außerTeam A
oderTeam B
Oft müssen wir Zeichen finden, die in irgendeinem oder einem anderen Kontext (wie Buchstaben von A
bis Z
) "zusammengehören".
Passen Sie verschiedene, ähnliche Wörter an
Betrachten Sie die Zeichenklasse [aeiou]
. Diese Zeichenklasse kann in einem regulären Ausdruck verwendet werden, um einen Satz ähnlich geschriebener Wörter zu finden.
b[aeiou]t
passt zu:
- Fledermaus
- Wette
- bisschen
- bot
- aber
Es passt nicht:
- Kampf
- btt
- bt
Charakterklassen entsprechen für sich jeweils nur einen Charakter.
Nicht-Alphanumerik-Abgleich (negierte Zeichenklasse)
[^0-9a-zA-Z]
Dies entspricht allen Zeichen, die weder Ziffern noch Buchstaben sind (alphanumerische Zeichen). Wenn der Unterstrich _
auch negiert werden soll, kann der Ausdruck folgendermaßen verkürzt werden:
[^\w]
Oder:
\W
In den folgenden Sätzen:
Hi was geht?
Ich kann nicht bis 2017 warten !!!
Die folgenden Zeichen stimmen überein:
,
,,
'
,?
und das Zeilenende-Zeichen.
'
,
!
und das Zeilenende-Zeichen.
UNICODE HINWEIS
Beachten Sie, dass einige Varianten mit Unterstützung für Unicode-Zeichensätze \w
und \W
möglicherweise als [\p{L}\p{N}_]
und [^\p{L}\p{N}_]
interpretieren, was andere Unicode-Buchstaben bedeutet und numerische Zeichen werden ebenfalls eingeschlossen (siehe PCRE-Dokumente ). Hier ist ein PCRE \w
Test :
In .NET \w
= [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Lm}\p{Mn}\p{Nd}\p{Pc}]
, Beachten Sie, dass es im Gegensatz zu PCRE nicht zu \p{Nl}
und \p{No}
passt (siehe die Dokumentation zu \w
.NET ):
Beachten Sie, dass Unicode 3.1-Kleinbuchstaben (wie 𝐚𝒇𝓌𝔨𝕨𝗐𝛌𝛚
) aus irgendeinem Grund nicht übereinstimmen.
Java (?U)\w
\w
stimmt mit einer Mischung von \w
überein, die in PCRE und .NET übereinstimmen:
Nicht-Ziffern-Übereinstimmung (negierte Zeichenklasse)
[^0-9]
Dies entspricht allen Zeichen, die keine ASCII-Ziffern sind.
Wenn Unicode-Ziffern auch negiert werden sollen, kann der folgende Ausdruck verwendet werden, je nach Ihren Geschmacks- / Spracheinstellungen:
[^\d]
Dies kann verkürzt werden auf:
\D
Möglicherweise müssen Sie die Unterstützung der Unicode-Zeichen-Eigenschaften explizit mithilfe des Modifizierers u
oder in einigen Sprachen programmgesteuert aktivieren. Dies ist jedoch möglicherweise nicht offensichtlich. Um die Absicht explizit zu vermitteln, kann das folgende Konstrukt verwendet werden (wenn Support verfügbar ist):
\P{N}
Was definitionsgemäß bedeutet: jedes Zeichen, das in keinem Skript ein numerisches Zeichen ist. In einem negierten Zeichenbereich können Sie Folgendes verwenden:
[^\p{N}]
In den folgenden Sätzen:
Hi was geht?
Ich kann nicht bis 2017 warten !!!
Die folgenden Zeichen werden übereinstimmen:
,
,,
'
,?
, das Zeilenendezeichen und alle Buchstaben (Klein- und Großbuchstaben).
'
,
!
, das Zeilenendezeichen und alle Buchstaben (Klein- und Großbuchstaben).
Charakterklasse und häufige Probleme des Anfängers
1. Zeichenklasse
Die Zeichenklasse wird mit []
. Inhalt innerhalb einer Zeichenklasse wird single character separately
als single character separately
behandelt. Nehmen wir beispielsweise an, wir verwenden
[12345]
Im obigen Beispiel bedeutet es Übereinstimmung 1 or 2 or 3 or 4 or 5
. In einfachen Worten kann es als or condition for single characters
( Betonung auf einzelne Zeichen )
1.1 Vorsicht
- In der Zeichenklasse gibt es kein Konzept, eine Zeichenfolge zu finden. Wenn Sie also Regex
[cat]
, bedeutet dies nicht, dass es wörtlich mit dem Wortcat
übereinstimmt, sondern mitc
odera
odert
. Dies ist ein sehr verbreitetes Missverständnis, das bei Menschen besteht, die neuerdings Regex sind. - Manchmal benutzen Leute
|
(alternativ) innerhalb der Charakterklasse wird angenommen, dass sie alsOR condition
die falsch ist. zB bedeutet[a|b]
eigentlich Übereinstimmung mita
oder|
(wörtlich) oderb
.
2. Bereich in Zeichenklasse
Der Bereich in der Zeichenklasse wird mit -
sign bezeichnet. Nehmen wir an, wir möchten ein beliebiges Zeichen in den englischen Alphabeten A
bis Z
. Dies kann mit der folgenden Zeichenklasse erfolgen
[A-Z]
Dies kann für jeden gültigen ASCII- oder Unicode-Bereich erfolgen. Zu den am häufigsten verwendeten Bereichen gehören [AZ]
, [az]
oder [0-9]
. Darüber hinaus können diese Bereiche in der Zeichenklasse als kombiniert werden
[A-Za-z0-9]
Dies bedeutet, dass jedes Zeichen im Bereich von A to Z
oder von a to z
oder von 0 to 9
übereinstimmt. Die Bestellung kann alles sein. Das obige ist also äquivalent zu [a-zA-Z0-9]
, solange der von Ihnen definierte Bereich korrekt ist.
2.1 Vorsicht
Beim Schreiben von Bereichen für
A
bisZ
schreiben die Leute es manchmal als[Az]
. Dies ist in den meisten Fällen falsch, weil wirz
anstelle vonZ
. Dies bedeutet also, dass jedes Zeichen aus dem ASCII-Bereich65
(von A) bis122
(von z) übereinstimmt, das viele unbeabsichtigte Zeichen nach dem ASCII-Bereich90
(von Z) enthält. JEDOCH[Az]
kann verwendet werden , um alle entsprechen[a-zA-Z]
Buchstaben in POSIX-Stil regex , wenn Sortierung für eine bestimmte Sprache eingestellt ist.[[ "ABCEDEF[]_abcdef" =~ ([Az]+) ]] && echo "${BASH_REMATCH[1]}"
auf Cygwin mitLC_COLLATE="en_US.UTF-8"
ergibtABCEDF
. Wenn SieLC_COLLATE
aufC
(auf Cygwin, mitexport
), wird der erwarteteABCEDEF[]_abcdef
.Bedeutung
-
innerhalb von Zeichenklasse ist etwas Besonderes. Es bezeichnet den oben erläuterten Bereich. Was ist, wenn wir-
buchstäblich übereinstimmen wollen? Wir können es nicht irgendwo einsetzen, sonst werden Bereiche angegeben, wenn es zwischen zwei Zeichen steht. In diesem Fall müssen Sie-
am Anfang einer Zeichenklasse wie[-AZ]
oder am Ende einer Zeichenklasse wie[AZ-]
oder esescape it
wenn Sie es wie[AZ\-az]
in der Mitte verwenden[AZ\-az]
.
3. Negierte Zeichenklasse
Negierte Zeichenklasse wird mit [^..]
. Das Caret-Zeichen ^
für ein beliebiges Zeichen außer dem in der Zeichenklasse vorhandenen Zeichen. z.B
[^cat]
bedeutet, dass jedes Zeichen außer c
oder a
oder t
übereinstimmt.
3.1 Wort der Vorsicht
- Die Bedeutung des Caret-Zeichens
^
wird der Negation nur dann zugeordnet, wenn die Zeichenklasse beginnt. Wenn es an einer anderen Stelle in der Zeichenklasse steht, wird es als wörtliche Einfügemarke ohne besondere Bedeutung behandelt. - Einige Leute schreiben Regex wie
[^]
. In den meisten Regex-Engines gibt dies einen Fehler aus. Wenn Sie^
in der Startposition verwenden, erwartet Sie mindestens ein Zeichen, das negiert werden soll. In JavaScript ist dies jedoch ein gültiges Konstrukt, das auf alles andere als auf nichts passt, dh auf jedes mögliche Symbol (außer Diakritik, zumindest in ES5).
POSIX-Zeichenklassen
POSIX-Zeichenklassen sind vordefinierte Sequenzen für einen bestimmten Zeichensatz.
Zeichenklasse | Beschreibung |
---|---|
[:alpha:] | Alphabetische Zeichen |
[:alnum:] | Alphabetische Zeichen und Ziffern |
[:digit:] | Ziffern |
[:xdigit:] | Hexadezimal-Ziffern |
[:blank:] | Leerzeichen und Tab |
[:cntrl:] | Steuerzeichen |
[:graph:] | Sichtbare Zeichen (außer Leerzeichen und Steuerzeichen) |
[:print:] | Sichtbare Zeichen und Leerzeichen |
[:lower:] | Kleinbuchstaben |
[:upper:] | Großbuchstaben |
[:punct:] | Interpunktion und Symbole |
[:space:] | Alle Leerzeichen, einschließlich Zeilenumbrüche |
Je nach Implementierung und / oder Gebietsschema können zusätzliche Zeichenklassen verfügbar sein.
Zeichenklasse | Beschreibung |
---|---|
[:<:] | Anfang des Wortes |
[:>:] | Ende des Wortes |
[:ascii:] | ASCII-Zeichen |
[:word:] | Buchstaben, Ziffern und Unterstrich. Entspricht \w |
Um die innere Klammerfolge (auch als Zeichenklasse bezeichnet) zu verwenden, sollten Sie auch die eckigen Klammern verwenden. Beispiel:
[[:alpha:]]
Dies entspricht einem Buchstaben.
[[:digit:]-]{2}
Dies entspricht 2 Zeichen, entweder Ziffern oder -
. Folgendes wird passen:
-
--
-
11
-
-2
-
3-
Weitere Informationen finden Sie unter: Regular-expressions.info