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 entweder Team A oder Team B
  • Team [^AB] : Dies passt zu jedem Team außer Team A oder Team 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:

  1. Hi was geht?

  2. Ich kann nicht bis 2017 warten !!!

Die folgenden Zeichen stimmen überein:

  1. , , , ' , ? und das Zeilenende-Zeichen.

  2. ' , ! 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 : Geben Sie hier die Bildbeschreibung ein

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 ):

Bild

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: Geben Sie hier die Bildbeschreibung ein

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:

  1. Hi was geht?

  2. Ich kann nicht bis 2017 warten !!!

Die folgenden Zeichen werden übereinstimmen:

  1. , , , ' , ? , das Zeilenendezeichen und alle Buchstaben (Klein- und Großbuchstaben).

  2. ' , ! , 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 Wort cat übereinstimmt, sondern mit c oder a oder t . 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 als OR condition die falsch ist. zB bedeutet [a|b] eigentlich Übereinstimmung mit a oder | (wörtlich) oder b .

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 bis Z schreiben die Leute es manchmal als [Az] . Dies ist in den meisten Fällen falsch, weil wir z anstelle von Z . Dies bedeutet also, dass jedes Zeichen aus dem ASCII-Bereich 65 (von A) bis 122 (von z) übereinstimmt, das viele unbeabsichtigte Zeichen nach dem ASCII-Bereich 90 (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 mit LC_COLLATE="en_US.UTF-8" ergibt ABCEDF . Wenn Sie LC_COLLATE auf C (auf Cygwin, mit export ), wird der erwartete ABCEDEF[]_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 es escape 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



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow