Mit regulären Ausdrücken
- Last UpdatedSep 26, 2024
- 3 minute read
Ein regulärer Ausdruck beschreibt einen oder mehrere Zeichenketten, die übereinstimmen müssen, wenn Sie ein Skript mit alphanumerischen Zeichen und Sonderzeichen durchsuchen. Ein regulärer Ausdruck besteht aus normalen Zeichen, die als Vorlage eines Zeichenmusters für die gesuchte Zeichenkette dienen.
Reguläre Ausdrücke werden konstruiert, vergleichbar mit dem Erstellen von arithmetischen Ausdrücken. Kleine Ausdrücke werden mit verschiedenen Metazeichen und Operatoren kombiniert, um längere Ausdrücke zu erzeugen.
Ein regulärer Ausdruck kann aus einzelnen Zeichen, Zeichensätzen, Zeichenbereichen oder einer Zeichenauswahl bestehen. Komponenten können auch jede beliebige Kombination dieser Komponenten sein.
Regulärer Skript-Ausdruck
|
Regulärer Ausdruck |
Zweck |
Beispiel |
|
. |
Einzelne Zeichen müssen übereinstimmen (außer Zeilenumbruch) |
s.e. stimmt mit "ste" in "step" und "sfe", "transfer", aber nicht mit "acro" in "across" überein. |
|
* |
Keine oder mehrere Vorkommen des vorangestellten Ausdrucks (so viele Zeichen wie möglich) müssen übereinstimmen |
a*r stimmen mit "r" in "rack", "ar" in "ark" und "aar" in "aardvark" überein |
|
.* |
Alle Zeichen müssen nie oder mehrmals übereinstimmen (Platzhalter *) |
c.*e stimmt mit "cke" in "racket", "comme" in "comment" und "code" in "code" überein |
|
+ |
Eine oder mehrere Vorkommen des vorangestellten Ausdrucks (so viele Zeichen wie möglich) müssen übereinstimmen |
e.+e stimmt mit "eede" in "feeder", aber nicht mit "ee" überein. |
|
.+ |
Alle Zeichen müssen einmal oder mehrmals übereinstimmen (Platzhalter ?) |
e.+e stimmt mit "eede" in "feeder" aber nicht mit "ee" überein. |
|
*? |
Keine oder mehrere Vorkommen des vorangestellten Ausdrucks (so wenige Zeichen wie möglich) müssen übereinstimmen |
e.*?e stimmt mit "ee" in "feeder" aber nicht mit "eede" überein. |
|
+? |
Eine oder mehrere Vorkommen des vorangestellten Ausdrucks (so wenige Zeichen wie möglich) müssen übereinstimmen |
e.+?e stimmt mit "ente" und "erprise" in "enterprise" aber nicht mit dem ganzen Wort "enterprise" überein. |
|
^ |
Die übereinstimmende Zeichenfolge wird mit einem Zeilenanfang oder einer Zeichenkette verbunden |
^car stimmt nur mit dem Wort "car" überein, wenn es an einem Zeilenanfang vorkommt. |
|
\r?$ |
Die übereinstimmende Zeichenfolge wird mit einem Zeilenende verbunden |
End\r? nbsp;stimmt nur mit dem Wort "end" überein, wenn es an einem Zeilenende vorkommt. |
|
[abc] |
Einzelne Zeichen müssen als Satz übereinstimmen |
b[abc] stimmt mit "ba", "bb" und "bc" überein. |
|
[a-f] |
Ein beliebiges Zeichen muss in einer Reihe von Zeichen übereinstimmen |
be[n-t] stimmt mit "bet" in "between", "ben" in "beneath" und "bes" in "beside", aber nicht mit "below" überein. |
|
() |
Der Ausdruck in Klammern wird erfasst und implizit gezählt |
([a-z])X\1 stimmt mit "aXa" und "bXb", aber nicht mit "aXb" überein. ". "\1" bezieht sich auf die erste Ausdrucksgruppe "[a-z]". |
|
(?!abc) |
Eine Übereinstimmung ungültig machen |
real (?!ity) stimmt mit "real" in "realty" und "really", aber nicht in "reality" überein. Hier wird auch das zweite "real" (aber nicht das erste "real") in "realityreal" gefunden. |
|
(?!abc) |
Alle beliebigen Zeichen müssen übereinstimmen, die nicht mit einem angegebenen Zeichensatz übereinstimmen |
be[n-t] stimmt mit "bef" in "before", "beh" in "behind" und "bel" in "below", aber nicht mit "beneath" überein. |
|
| |
Entweder der Ausdruck vor oder nach dem Symbol stimmt überein. |
(sponge|mud)bath Stimmt mit "spongebath" und "mudbath" überein. |
|
|\^ |
Das Zeichen nach dem Gegenschrägstrich wird aufgehoben |
|
|
{x}, |
Die Anzahl der Vorkommen der vorangestellten Zeichengruppe wird angegeben |
x(ab){2}x stimmt mit "xababx" und x(ab){2,3}x stimmt mit "xababx" und "xabababx", aber nicht mit "xababababx" überein. |
|
\p{X} |
Text in einer Unicode-Zeichenklasse wird verglichen, wobei "X" die Unicode-Zahl ist. |
\p{Lu} "T" und "D" in "Thomas Doe" stimmen überein. |
|
\b |
Eine Wortgrenze wird verglichen |
\bin stimmt mit "in" in "inside", aber nicht in "pinto" überein. |
|
\r?\n |
Ein Zeilenumbruch wird verglichen (d. h. eine Zeilenumschaltung gefolgt von einer neuen Zeile). |
End\r?\nBegin Vergleicht "End" und "Begin" nur, wenn "End" die letzte Zeichenkette auf der letzten Zeile und "Begin" die erste Zeichenkette in der nächsten Zeile ist. |
|
\w |
Alle alphanumerischen Zeichen werden verglichen |
a\wd vergleicht "add" und "a1d", aber nicht "a d". |
|
(?[^\r\n])\s |
Alle Leerzeichen werden verglichen |
Public\sInterface die Phrase "Public Interface" stimmt überein. |
|
\d |
Alle numerischen Zeichen werden verglichen |
\d stimmt mit "3" in "3456", "2" in 23" und "1" in "1" überein. |
|
\uXXXX, wobei XXXX den Unicode-Zeichenwert bestimmt |
Einn Unicode-Zeichen suchen |
\u0065 Sucht das Zeichen "e". |
|
\b(\w+|[\w-[0-9\]]\w*)\b |
Einen Identifikator suchen |
Sucht "type1" aber nicht &type1" oder "#define". |
|
((\".+?\")|('.+?')) |
Zeichenketten in Anführungszeichen suchen |
Sucht alle Zeichenketten in Anführungszeichen. |
|
\b0[xX]([0-9a-fA-F])\b |
Hexadezimalzahlen suchen |
Sucht "0xc67f", aber nicht "0xc67fc67f". |
|
\b[0-9]\.\[0-9]+\b |
Ganzzahlen und d suchen |
Sucht "1.333". |
Prioritätsrangfolge
Ein regulärer Ausdruck wird von links nach rechts evaluiert und folgt einer Prioritätsrangfolge.
Die folgende Tabelle zeigt die Prioritätsrangfolge der Operatoren regulärer Ausdrücke vom Höchsten zum Niedrigsten.
|
Operator oder Operatoren |
Beschreibung |
|
\ |
Escape |
|
(), (?:), (?=), [] |
Klammern |
|
*, +, ?, {n}, {n,}, {n,m} |
Quantifikatoren |
|
^, $, \anymetacharacter |
Verbindungen und Sequenzen |
|
| |
Alternation |
Zeichen haben eine höhere Piorität als der Alternationsoperator, z. B. stimmt "m|food" mit "m" oder "food" überein.