Teilen über


Reguläre Ausdrücke (C++)

Die C++-Standardbibliothek unterstützt mehrere Grammatiken für reguläre Ausdrücke. In diesem Thema werden die Grammatikvariationen erläutert, die bei Verwendung regulärer Ausdrücke verfügbar sind.

Grammatik für reguläre Ausdrücke

Die zu verwendende Grammatik für reguläre Ausdrücke wird durch die Verwendung eines der std::regex_constants::syntax_option_type Enumerationswerte angegeben. Diese Grammatiken für reguläre Ausdrücke werden in std::regex_constants:

  • ECMAScript: Dies ist am nächsten an die Grammatik, die von JavaScript und den .NET-Sprachen verwendet wird.
  • basic: Die regulären POSIX-Ausdrücke basic oder BRE-Ausdrücke.
  • extended: Die regulären POSIX-Ausdrücke extended oder ERE.
  • awk: Dies ist extended, aber es hat mehr Escapezeichen für nicht druckbaren Zeichen.
  • grep: Dies ist basic, aber es ermöglicht auch Zeilenumbruchzeichen (\n) die Trennung von Änderungen.
  • egrep: Dies ist extended, aber es ermöglicht auch Neuzeilenzeichen, Änderungen zu trennen.

Wenn keine Grammatik angegeben ist, ECMAScript wird standardmäßig angenommen. Es kann nur eine Grammatik angegeben werden.

Es können auch mehrere Kennzeichen angewendet werden:

  • icase: Groß-/Kleinschreibung beim Abgleich ignorieren.
  • nosubs: Ignoriert markierte Übereinstimmungen (d. a. Ausdrücke in Klammern); es werden keine Ersetzungen gespeichert.
  • optimize: Machen Sie die Übereinstimmung schneller, auf kosten einer größeren Bauzeit.
  • collate: Verwenden Sie gebietsschemasensitive Sortierreihenfolgen (z. B. Bereiche des Formulars [a-z]).

Null oder mehr Flags können mit der Grammatik kombiniert werden, um das Verhalten des Regulären Ausdrucksmoduls anzugeben. Wenn nur Flags angegeben werden, ECMAScript wird als Grammatik angenommen.

Element

Ein Element kann eine der folgenden Sein:

  • Ein normales Zeichen , das demselben Zeichen in der Zielsequenz entspricht.

  • Ein Wildcardzeichen, das einem beliebigen Zeichen '.' in der Zielsequenz mit Ausnahme einer Neuzeile entspricht.

  • Ein Klammerausdruck des Formulars [expr], der mit einem Zeichen oder einem Sortierungselement in der Zielsequenz übereinstimmt, die sich auch in der durch den Ausdruck exprdefinierten Gruppe oder des Formulars [^expr]befindet, die einem Zeichen oder einem Sortierungselement in der Zielsequenz entspricht, die nicht in der durch den Ausdruck exprdefinierten Menge enthalten ist.

    Der Ausdruck expr kann eine beliebige Kombination der folgenden Elemente enthalten:

    • Ein einzelnes Zeichen. Fügt das Zeichen dem durch expr.

    • Ein Zeichenbereich des Formulars ch1-ch2. Fügt die Zeichen, die durch Werte im geschlossenen Bereich [ch1, ch2] dargestellt werden, dem durch exprdefinierten Satz hinzu.

    • Eine Zeichenklasse des Formulars [:name:]. Fügt die Zeichen in der benannten Klasse dem von expr.

    • Eine Äquivalenzklasse des Formulars [=elt=]. Fügt die Sortierelemente hinzu, die dem durch definierten exprSatz entsprechenelt.

    • Ein Sortiersymbol des Formulars [.elt.]. Fügt das Sortierungselement elt dem durch expr.

  • Anker. Anchor ^ entspricht dem Anfang der Zielsequenz. Anchor $ entspricht dem Ende der Zielsequenz.

  • Eine Aufnahmegruppe des Formulars (Subexpression) oder \(subexpression\) in basic und grep, die der Abfolge von Zeichen in der Zielsequenz entspricht, die mit dem Muster zwischen den Trennzeichen übereinstimmt.

  • Ein Identitäts escapezeichen des Formulars \k, das dem Zeichen k in der Zielsequenz entspricht.

Beispiele

  • a entspricht der Zielsequenz "a" , stimmt aber nicht mit den Zielsequenzen "B", "b"oder "c".

  • . entspricht allen Zielsequenzen "a", , "B", "b"und "c".

  • [b-z]entspricht den Zielsequenzen "b" und "c" stimmt nicht mit den Zielsequenzen "a" überein."B"

  • [:lower:] entspricht den Zielsequenzen "a", "b"und "c" stimmt nicht mit der Zielsequenz "B"überein.

  • (a) entspricht der Zielsequenz "a" und ordnet die Erfassungsgruppe 1 der Untermenge "a"zu, stimmt aber nicht mit den Zielsequenzen "B", "b"oder "c".

In ECMAScript, basicund , kann grepein Element auch ein Zurückverweis des Formulars \ddsein, wobei dd ein Dezimalwert N darstellt, der einer Abfolge von Zeichen in der Zielsequenz entspricht, die mit der Sequenz der Zeichen übereinstimmt, die von der Nth-Aufnahmegruppe abgeglichen werden.

Entspricht z. B. der Zielsequenz"aa", (a)\1 da die erste (und nur) Erfassungsgruppe mit der ursprünglichen Sequenz "a" übereinstimmt und dann mit der \1 endgültigen Sequenz "a"übereinstimmt.

In ECMAScript, kann ein Element auch eine der folgenden sein:

  • Eine nicht erfasste Gruppe des Formulars (?: Subexpression). Entspricht der Abfolge von Zeichen in der Zielsequenz, die mit dem Muster zwischen den Trennzeichen übereinstimmt.

  • Ein eingeschränktes Dateiformat-Escapezeichen des Formulars \f, \n, , \r, \toder \v. Diese entsprechen einem Formularfeed, einer Neuenlinie, einem Wagenrücklauf, einem horizontalen Tabstopp bzw. einer vertikalen Registerkarte in der Zielsequenz.

  • Eine positive Bestätigung des Formulars (= Subexpression). Entspricht der Abfolge von Zeichen in der Zielsequenz, die mit dem Muster zwischen den Trennzeichen übereinstimmt, aber die Übereinstimmungsposition in der Zielsequenz nicht ändert.

  • Eine negative Bestätigung der Form (! Subexpression). Gleicht eine beliebige Abfolge von Zeichen in der Zielsequenz ab, die nicht mit dem Muster zwischen den Trennzeichen übereinstimmt, und ändert nicht die Übereinstimmungsposition in der Zielsequenz.

  • Eine hexadezimale Escapesequenz des Formulars \xhh. Entspricht einem Zeichen in der Zielsequenz, das durch die beiden hexadezimalen hhZiffern dargestellt wird.

  • Eine Unicode-Escapesequenz des Formulars \uhhhh. Entspricht einem Zeichen in der Zielsequenz, das durch die vier hexadezimalen hhhhZiffern dargestellt wird.

  • Eine Escapesequenz des Steuerelements des Formulars \ck. Entspricht dem Steuerelementzeichen, das vom Zeichen kbenannt wird.

  • Eine Wortbegrenzungsbehauptung des Formulars \b. Gleicht ab, wenn die aktuelle Position in der Zielsequenz unmittelbar nach einer Wortgrenze liegt.

  • Eine negative Wortgrenze, die das Formular \Bangibt. Übereinstimmungen, wenn die aktuelle Position in der Zielsequenz nicht unmittelbar nach einer Wortgrenze liegt.

  • Ein Dsw-Zeichen escape des Formulars \d, , \D, \s\S, , \w. \W. Stellt einen kurzen Namen für eine Zeichenklasse bereit.

Beispiele

  • (?:a) entspricht der Zielsequenz "a", ist aber "(?:a)\1" ungültig, da keine Aufnahmegruppe 1 vorhanden ist.

  • (=a)a entspricht der Zielsequenz "a". Die positive Assertion stimmt mit der anfänglichen Sequenz in der Zielsequenz "a" überein, und das Finale "a" im regulären Ausdruck entspricht der ursprünglichen Sequenz in der Zielsequenz "a" .

  • (!a)a stimmt nicht mit der Zielsequenz "a"überein.

  • a\b. entspricht der Zielsequenz "a~", stimmt aber nicht mit der Zielsequenz überein "ab".

  • a\B. entspricht der Zielsequenz "ab", stimmt aber nicht mit der Zielsequenz überein "a~".

In awk, kann ein Element auch eine der folgenden sein:

  • Ein Dateiformat-Escapezeichen des Formulars \\, , \a\b, \f, \n, , \r, oder \t\v. Diese stimmen mit einem umgekehrten Schrägstrich, einer Warnung, einer Rücktaste, einem Formularfeed, einer Neuenlinie, einem Wagenrücklauf, einer horizontalen Registerkarte bzw. einer vertikalen Registerkarte in der Zielsequenz überein.

  • Eine oktale Escapesequenz des Formulars \ooo. Entspricht einem Zeichen in der Zielsequenz, dessen Darstellung der Wert ist, der durch die eine, zwei oder drei oktale Ziffern ooodargestellt wird.

Wiederholung

Auf ein anderes Element als eine positive Assertion, eine negative Assertion oder einen Anker kann eine Wiederholungsanzahl folgen. Die allgemeinste Art der Wiederholungsanzahl nimmt die Form {min,max} oder \{min,max\} in basic und grep. Ein Element, auf das diese Form der Wiederholungsanzahl folgt, entspricht mindestens min . aufeinander folgenden Vorkommen und nicht mehr als die maximalen aufeinanderfolgenden Vorkommen einer Sequenz, die dem Element entspricht.

Entspricht z. B a{2,3} . der Zielsequenz "aa" und der Zielsequenz "aaa", aber nicht der Zielsequenz oder der Zielsequenz "a""aaaa".

Eine Wiederholungsanzahl kann auch eine der folgenden Formen annehmen:

  • {min} oder \{min} in basic und grep. Entspricht {min,min}.

  • {min,} oder \{min,\} in basic und grep. Entspricht {min,ungebunden}.

  • * entspricht {0,ungebunden}.

Beispiele

  • a{2} entspricht der Zielsequenz "aa" , aber nicht der Zielsequenz "a" oder der Zielsequenz "aaa".

  • a{2,}entspricht der Zielsequenz, der Zielsequenz "aa""aaa"usw., stimmt aber nicht mit der Zielsequenz überein"a".

  • a*entspricht der Zielsequenz, der Zielsequenz"""a", der Zielsequenz "aa"usw.

Für alle Grammatiken mit Ausnahme basic und grep, kann eine Wiederholungsanzahl auch eine der folgenden Formen annehmen:

  • ? entspricht {0,1}.

  • + entspricht {1,ungebunden}.

Beispiele

  • a? entspricht der Zielsequenz und der Zielsequenz """a", aber nicht der Zielsequenz "aa".

  • a+entspricht der Zielsequenz, der Zielsequenz "a""aa"usw., aber nicht der Zielsequenz"".

In ECMAScript, alle Formen der Wiederholungsanzahl kann von dem Zeichen ? gefolgt werden, das eine nicht gierige Wiederholung bezeichnet.

Verkettung

Reguläre Ausdruckselemente mit oder ohne Wiederholungsanzahl können verkettet werden, um längere reguläre Ausdrücke zu bilden. Der resultierende Ausdruck entspricht einer Zielsequenz, bei der es sich um eine Verkettung der Sequenzen handelt, die von den einzelnen Elementen abgeglichen werden.

Entspricht z. B a{2,3}b . der Zielsequenz "aab" und der Zielsequenz "aaab", stimmt aber nicht mit der Zielsequenz oder der Zielsequenz "ab" überein "aaaab".

Alternative

In allen Grammatiken für reguläre Ausdrücke mit Ausnahme basic und grep, kann ein verketteter regulärer Ausdruck durch das Zeichen | (Pipe) und einen anderen verketteten regulären Ausdruck gefolgt werden. Eine beliebige Anzahl verketteter regulärer Ausdrücke kann auf diese Weise kombiniert werden. Der resultierende Ausdruck entspricht jeder Zielsequenz, die einem oder mehreren der verketteten regulären Ausdrücke entspricht.

Wenn mehr als einer der verketteten regulären Ausdrücke mit der Zielsequenz übereinstimmt, wählt sie den ersten der verketteten regulären Ausdrücke aus, ECMAScript die der Sequenz als Übereinstimmung entsprechen, die als erste Übereinstimmung bezeichnet wird. Die anderen Grammatiken für reguläre Ausdrücke wählen die Grammatik aus, die die längste Übereinstimmung erreicht.

Entspricht z. B ab|cd . der Zielsequenz "ab" und der Zielsequenz "cd", stimmt aber nicht mit der Zielsequenz oder der Zielsequenz "abd" überein "acd".

In grep und egrep, ein Zeilenumbruchzeichen (\n) kann verwendet werden, um Änderungen zu trennen.

Teilausdruck

In basic und grep, ein Unterausdruck ist eine Verkettung. In den anderen Grammatiken für reguläre Ausdrücke ist ein Unterausdruck eine Änderung.

Grammatikzusammenfassung

In der folgenden Tabelle sind die Features zusammengefasst, die in den verschiedenen Grammatiken für reguläre Ausdrücke verfügbar sind:

Element basic extended ECMAScript grep egrep awk
Änderung mithilfe von | + + + +
Änderung mithilfe von \n + +
anchor + + + + + +
Zurückverweis + + +
Klammerausdruck + + + + + +
Erfassen einer Gruppe mithilfe von () + + + +
Erfassen einer Gruppe mithilfe von \(\) + +
Escapesequenz des Steuerelements +
Dsw-Zeichen escape +
Dateiformat escape + +
hexadezimale Escapesequenz +
Identitäts escape + + + + + +
negative Assertion +
Negative Wortbegrenzungsbehauptung +
Gruppe ohne Erfassung +
Nicht-gierige Wiederholung +
oktale Escapesequenz +
Normales Zeichen + + + + + +
positives Bestätigen +
Wiederholung mit {} + + + +
Wiederholung mit \{\} + +
Wiederholung mit * + + + + + +
Wiederholung und ?+ + + + +
Unicode-Escapesequenz +
Platzhalterzeichen + + + + + +
Word-Begrenzungsbehauptung +

Semantische Details

Anchor

Ein Anker entspricht einer Position in der Zielzeichenfolge, nicht einem Zeichen. A ^ stimmt mit dem Anfang der Zielzeichenfolge überein und entspricht dem $ Ende der Zielzeichenfolge.

Zurückverweis

Ein Zurückverweis ist ein umgekehrter Schrägstrich, gefolgt von einem Dezimalwert N. Sie entspricht dem Inhalt der Nth-Aufnahmegruppe. Der Wert von N darf nicht mehr sein als die Anzahl der Aufnahmegruppen, die vor dem Rückverweis stehen. In basic und grep, der Wert von N wird durch die Dezimalziffer bestimmt, die auf den umgekehrten Schrägstrich folgt. In ECMAScript, der Wert von N wird durch alle Dezimalziffern bestimmt, die unmittelbar auf den umgekehrten Schrägstrich folgen. Daher ist in basic und grep, der Wert von N nie mehr als 9, auch wenn der reguläre Ausdruck mehr als neun Aufnahmegruppen hat. In ECMAScript, der Wert von N ist ungebunden.

Beispiele

  • ((a+)(b+))(c+)\3 entspricht der Zielsequenz "aabbbcbbb". Der Rückverweis \3 entspricht dem Text in der dritten Aufnahmegruppe, d. h. dem "(b+)". Sie stimmt nicht mit der Zielsequenz überein "aabbbcbb".

  • (a)\2 ist ungültig.

  • (b(((((((((a))))))))))\10 hat unterschiedliche Bedeutungen in basic und in ECMAScript. In basic, der Zurückverweis ist \1. Der Zurückverweis entspricht dem Inhalt der ersten Aufnahmegruppe (d. h. dem, mit dem der letzte beginnt (b und endet und vor dem Rückbezug kommt), und das letzte 0 entspricht dem normalen Zeichen0.) In ECMAScript, der Zurückverweis ist \10. Sie entspricht der zehnten Aufnahmegruppe, d. h. der innersten.

Klammerausdruck

Ein Klammerausdruck definiert eine Reihe von Zeichen und sortierte Elemente. Wenn der Klammerausdruck mit dem Zeichen ^ beginnt, wird die Übereinstimmung erfolgreich ausgeführt, wenn keine Elemente im Satz mit dem aktuellen Zeichen in der Zielsequenz übereinstimmen. Andernfalls ist die Übereinstimmung erfolgreich, wenn eines der Elemente im Satz mit dem aktuellen Zeichen in der Zielsequenz übereinstimmt.

Der Satz von Zeichen kann definiert werden, indem eine beliebige Kombination aus einzelnen Zeichen, Zeichenbereichen, Zeichenklassen, Äquivalenzklassen und Sortiersymbolen aufgelistet wird.

Gruppe erfassen

Eine Aufnahmegruppe kennzeichnet den Inhalt als einzelne Einheit in der Grammatik des regulären Ausdrucks und beschriftt den Zieltext, der dem Inhalt entspricht. Die Beschriftung, die jeder Aufnahmegruppe zugeordnet ist, ist eine Zahl, die durch zählen der öffnenden Klammern bestimmt wird, die Erfassungsgruppen bis hin zur öffnenden Klammer markieren und die öffnende Klammer, die die aktuelle Erfassungsgruppe kennzeichnet. In dieser Implementierung beträgt die maximale Anzahl von Erfassungsgruppen 31.

Beispiele

  • ab+ entspricht der Zielsequenz "abb", stimmt aber nicht mit der Zielsequenz überein "abab".

  • (ab)+ stimmt nicht mit der Zielsequenz "abb"überein, sondern entspricht der Zielsequenz "abab".

  • ((a+)(b+))(c+) entspricht der Zielsequenz "aabbbc" und ordnet die Erfassungsgruppe 1 der Untermenge "aabbb", der Erfassungsgruppe 2 mit der Untermenge "aa", der Erfassungsgruppe 3 und "bbb"der Erfassungsgruppe 4 mit der Untermenge "c"zu.

Zeichenklasse

Eine Zeichenklasse in einem Klammerausdruck fügt alle Zeichen in der benannten Klasse dem Zeichensatz hinzu, der durch den Klammerausdruck definiert wird. Um eine Zeichenklasse zu erstellen, verwenden Sie [: gefolgt vom Namen der Klasse, gefolgt von :].

Intern werden Namen von Zeichenklassen durch Aufrufen id = traits.lookup_classnameerkannt. Ein Zeichen ch gehört zu einer solchen Klasse, wenn traits.isctype(ch, id) "true" zurückgegeben wird. Die Standardvorlage regex_traits unterstützt die Klassennamen in der folgenden Tabelle.

Klassenname Description
alnum Kleinbuchstaben, Großbuchstaben und Ziffern
alpha Kleinbuchstaben und Großbuchstaben
blank Leerzeichen oder Tabstopp
cntrl Escapezeichen im Dateiformat
digit Ziffern
graph Kleinbuchstaben, Großbuchstaben, Ziffern und Interpunktionszeichen
lower Kleinbuchstaben
print Kleinbuchstaben, Großbuchstaben, Ziffern, Satzzeichen und Leerzeichen
punct Interpunktion
space Leerzeichen
upper Großbuchstaben
xdigit Ziffern, a, , b, cd, , e, f, ABCD, EF
d identisch mit digit
s identisch mit space
w identisch mit alnum

Zeichenbereich

Ein Zeichenbereich in einem Klammerausdruck fügt alle Zeichen im Bereich dem Zeichensatz hinzu, der durch den Klammerausdruck definiert wird. Um einen Zeichenbereich zu erstellen, legen Sie das Zeichen '-' zwischen den ersten und letzten Zeichen im Bereich ein. Ein Zeichenbereich platziert alle Zeichen mit einem numerischen Wert, der größer oder gleich dem numerischen Wert des ersten Zeichens und kleiner als oder gleich dem numerischen Wert des letzten Zeichens ist, in die Menge. Beachten Sie, dass dieser Satz von hinzugefügten Zeichen von der plattformspezifischen Darstellung von Zeichen abhängt. Wenn das Zeichen '-' am Anfang oder am Ende eines Klammerausdrucks oder als erstes oder letztes Zeichen eines Zeichenbereichs auftritt, stellt es sich selbst dar.

Beispiele

  • [0-7]stellt den Satz von Zeichen { 0, , 1, 2, 3, 4, 5, , 76} dar. Sie entspricht den Zielsequenzen "0", "1"usw., aber nicht "a".

  • Auf Systemen, die ASCII-Zeichencodierung verwenden, [h-k] stellt den Satz von Zeichen { h, , i, jk } dar. Sie entspricht den Zielsequenzen "h", "i"usw., aber nicht "\x8A" oder "0".

  • Auf Systemen, die die EBCDIC-Zeichencodierung verwenden, [h-k] stellt den Satz von Zeichen { h, , i, , '\x8A', '\x8B', '\x8D''\x8C', '\x8E', '\x8F', , '\x90', , j} k (h ist codiert als 0x88 und k ist codiert als 0x92). Sie entspricht den Zielsequenzen "h", "i", "\x8A"usw., aber nicht "0".

  • [-0-24] stellt den Satz von Zeichen { -, , 0, 1, 2, 4 } dar.

  • [0-2-]stellt den Satz von Zeichen { 0, 1, , 2- } dar.

  • Auf Systemen, die ASCII-Zeichencodierung verwenden, [+--] steht für den Satz von Zeichen { +,- }.

Wenn gebietsschemabezogene Bereiche verwendet werden, werden die Zeichen in einem Bereich jedoch durch die Sortierregeln für das Gebietsschema bestimmt. Zeichen, die nach dem ersten Zeichen in der Definition des Bereichs und vor dem letzten Zeichen in der Definition des Bereichs sortiert werden, befinden sich im Satz. Die beiden Endzeichen befinden sich ebenfalls im Satz.

Collating-Element

Ein Sortierelement ist eine mehrstellige Sequenz, die als einzelnes Zeichen behandelt wird.

Sortiersymbol

Ein Sortiersymbol in einem Klammerausdruck fügt dem Satz, der durch den Klammerausdruck definiert wird, ein Sortierelement hinzu. Um ein Sortiersymbol zu erstellen, verwenden Sie [. gefolgt vom Sortierelement, gefolgt von .]

Steuer-Escapesequenz

Eine Steuer-Escapesequenz ist ein umgekehrter Schrägstrich gefolgt vom Buchstaben 'c' , gefolgt von einem der Buchstaben 'a' durch 'z' oder 'A' durch 'Z'. Es entspricht dem ASCII-Steuerelementzeichen, das durch diesen Buchstaben benannt wird. Entspricht z "\ci" . B. der Zielsequenz "\x09", da STRG+I den Wert 0x09aufweist.

DSW-Zeichen escape

Ein Dsw-Zeichen escape ist ein kurzer Name für eine Zeichenklasse, wie in der folgenden Tabelle dargestellt.

Escapesequenz Gleichwertige benannte Klasse Benannte Standardklasse
\d [[:d:]] [[:digit:]]
\D [^[:d:]] [^[:digit:]]
\s [[:s:]] [[:space:]]
\S [^[:s:]] [^[:space:]]
\w [[:w:]] [a-zA-Z0-9_]*
\W [^[:w:]] [^a-zA-Z0-9_]*

*ASCII-Zeichensatz

Äquivalenzklasse

Eine Äquivalenzklasse in einem Klammerausdruck fügt alle Zeichen und Sortierelemente hinzu, die dem Sortierelement in der Äquivalenzklassendefinition entsprechen, dem Satz, der durch den Klammerausdruck definiert wird.

Um eine Äquivalenzklasse zu erstellen, verwenden Sie [= gefolgt von einem Sortierelement, gefolgt von =]. Intern sind zwei Sortierelemente elt1 identisch elt2 , wenn traits.transform_primary(elt1.begin(), elt1.end()) == traits.transform_primary(elt2.begin(), elt2.end()).

Escape für Dateiformate

Ein Dateiformat escape besteht aus den üblichen Escapesequenzen des C-Sprachzeichens, \\, , , \t\a\n\r\b\f. \v Diese haben die üblichen Bedeutungen, d. h. umgekehrter Schrägstrich, Warnung, Rücktaste, Formularfeed, Newline, Wagenrücklauf, horizontales Tabstopp und vertikales Tabstopp. In ECMAScript, \a und \b sind nicht zulässig. (\\ ist zulässig, aber es handelt sich um ein Identitäts escapezeichen, kein Dateiformat escape).

Hexadezimale Escapesequenz

Eine hexadezimale Escapesequenz ist ein umgekehrter Schrägstrich gefolgt von zwei x hexadezimalen Ziffern (0-9a-fA-F). Es entspricht einem Zeichen in der Zielsequenz mit dem Wert, der durch die beiden Ziffern angegeben wird.

Entspricht beispielsweise der Zielsequenz"a", "\x41" wenn die ASCII-Zeichencodierung verwendet wird.

Identitäts escape

Ein Identitäts escape ist ein umgekehrter Schrägstrich gefolgt von einem einzelnen Zeichen. Es entspricht diesem Zeichen. Es ist erforderlich, wenn das Zeichen eine besondere Bedeutung hat. Die Verwendung der Identitäts escape entfernt die besondere Bedeutung. Beispiel:

  • a* entspricht der Zielsequenz "aaa", stimmt aber nicht mit der Zielsequenz überein "a*".

  • a\* stimmt nicht mit der Zielsequenz "aaa"überein, sondern entspricht der Zielsequenz "a*".

Der Satz von Zeichen, die in einem Identitäts escape zulässig sind, hängt von der Grammatik des regulären Ausdrucks ab, wie in der folgenden Tabelle dargestellt.

Grammatik Zulässige Escapezeichen für Identitäten
basic, grep { } (){}.[\*^$
extended, egrep { } (){.[\*^$+?|
awk, extended plus { "/ }
ECMAScript Alle Zeichen außer denen, die Teil eines Bezeichners sein können. In der Regel umfasst dies Buchstaben, Ziffern, $, _und Unicode-Escapesequenzen. Weitere Informationen finden Sie in der ECMAScript Sprachspezifikation.

Einzelnes Zeichen

Ein einzelnes Zeichen in einem Klammerausdruck fügt dieses Zeichen dem zeichensatz hinzu, der durch den Klammerausdruck definiert wird. An einer beliebigen Stelle in einem Klammerausdruck, außer am Anfang, stellt ein ^ Symbol selbst dar.

Beispiele

  • [abc] entspricht den Zielsequenzen "a", "b"und "c", aber nicht der Sequenz "d".

  • [^abc]entspricht der Zielsequenz"d", aber nicht den Zielsequenzen "a", oder "b""c".

  • [a^bc]entspricht den Zielsequenzen "a", "b", und "c""^", aber nicht der Zielsequenz "d".

Bei allen Grammatiken für reguläre Ausdrücke mit Ausnahme ECMAScriptdes ] ersten Zeichens, das auf das Öffnen [ folgt, oder es handelt sich um das erste Zeichen, das einem anfänglichen ^folgt, stellt es sich selbst dar.

Beispiele

  • []a ist ungültig, da der Klammerausdruck nicht ] beendet werden kann.

  • []abc]entspricht den Zielsequenzen "a", "b", und "c""]", aber nicht der Zielsequenz "d".

  • [^]abc]entspricht der Zielsequenz"d", jedoch nicht den Zielsequenzen "a", , , "b"oder "]""c".

Verwenden ECMAScriptSie \] in , um das Zeichen ] in einem Klammerausdruck darzustellen.

Beispiele

  • []a entspricht der Zielsequenz "a" , da der Klammerausdruck leer ist.

  • [\]abc] entspricht den Zielsequenzen "a", "b", , "c"und "]" nicht der Zielsequenz "d".

Negative Assertion

Eine negative Assertion stimmt mit allen Inhalten überein. Sie verbraucht keine Zeichen in der Zielsequenz.

Entspricht z. B (!aa)(a*) . der Zielsequenz "a" und ordnet die Erfassungsgruppe 1 der Untermenge "a"zu. Sie stimmt nicht mit der Zielsequenz "aa" oder der Zielsequenz überein "aaa".

Negative Wortbegrenzungsbehauptung

Eine negative Wortbegrenzung stimmt überein, wenn die aktuelle Position in der Zielzeichenfolge nicht unmittelbar nach einer Wortgrenze liegt.

Gruppe ohne Erfassung

Eine Gruppe ohne Aufnahme markiert den Inhalt als einzelne Einheit in der Grammatik für reguläre Ausdrücke, beschriftet aber nicht den Zieltext.

Entspricht z (a)(?:b)*(c) . B. dem Zieltext "abbc" und ordnet die Erfassungsgruppe 1 der Untermenge und der Erfassungsgruppe 2 der Untersequence "a""c"zu.

Nicht gierige Wiederholung

Eine nicht gierige Wiederholung verbraucht die kürzeste Untermenge der Zielsequenz, die dem Muster entspricht. Eine gierige Wiederholung verbraucht die längste. Entspricht z. B (a+)(a*b) . der Zielsequenz "aaab".

Wenn eine nicht gierige Wiederholung verwendet wird, ordnet sie die Erfassungsgruppe 1 am "a" Anfang der Zielsequenz zu und erfasst Gruppe 2 mit der Untermenge "aab" am Ende der Zielsequenz.

Wenn eine gierige Übereinstimmung verwendet wird, ordnet sie die Erfassungsgruppe 1 der Untermenge und der Erfassungsgruppe 2 der Untersequence "aaa""b"zu.

Oktale Escapesequenz

Eine oktale Escapesequenz ist ein umgekehrter Schrägstrich gefolgt von einer, zwei oder drei oktalen Ziffern (0-7). Es entspricht einem Zeichen in der Zielsequenz, das den Wert aufweist, der durch diese Ziffern angegeben wird. Wenn alle Ziffern vorhanden sind, ist 0die Sequenz ungültig.

Entspricht beispielsweise der Zielsequenz"a", \101 wenn die ASCII-Zeichencodierung verwendet wird.

Normales Zeichen

Ein normales Zeichen ist ein beliebiges gültiges Zeichen, das in der aktuellen Grammatik keine besondere Bedeutung hat.

In ECMAScript, die folgenden Zeichen haben besondere Bedeutungen:

  • ^ $ \ . * + ? ( ) [ ] { } |

In basic und grep, die folgenden Zeichen haben besondere Bedeutungen:

  • . [ \

Auch in basic und , grepdie folgenden Zeichen haben besondere Bedeutungen, wenn sie in einem bestimmten Kontext verwendet werden:

  • * hat in allen Fällen eine besondere Bedeutung, es sei denn, es handelt sich um das erste Zeichen in einem regulären Ausdruck oder das erste Zeichen, das einer Initiale in einem regulären Ausdruck folgt, oder wenn es sich um das erste Zeichen einer Aufnahmegruppe oder des ersten Zeichens handelt, das auf eine Initiale ^^ in einer Aufnahmegruppe folgt.

  • ^ hat eine besondere Bedeutung, wenn es das erste Zeichen eines regulären Ausdrucks ist.

  • $ hat eine besondere Bedeutung, wenn es das letzte Zeichen eines regulären Ausdrucks ist.

In extended, egrepund , die awkfolgenden Zeichen haben besondere Bedeutungen:

  • . [ \ ( * + ? { |

Auch in extended, egrepund , die awkfolgenden Zeichen haben besondere Bedeutungen, wenn sie in einem bestimmten Kontext verwendet werden.

  • ) hat eine besondere Bedeutung, wenn sie einem vorherigen entspricht (

  • ^ hat eine besondere Bedeutung, wenn es das erste Zeichen eines regulären Ausdrucks ist.

  • $ hat eine besondere Bedeutung, wenn es das letzte Zeichen eines regulären Ausdrucks ist.

Ein normales Zeichen entspricht demselben Zeichen in der Zielsequenz. Dies bedeutet standardmäßig, dass die Übereinstimmung erfolgreich ist, wenn die beiden Zeichen durch denselben Wert dargestellt werden. Bei einer Übereinstimmung zwischen Groß- und Kleinschreibung werden zwei Zeichen ch0 und eine ch1 Übereinstimmung bei Bedarf traits.translate_nocase(ch0) == traits.translate_nocase(ch1)berücksichtigt. Bei einer Gebietsschema-vertraulichen Übereinstimmung werden zwei Zeichen ch0 und übereinstimmungen ch1 , wenn traits.translate(ch0) == traits.translate(ch1).

Positives Bestätigen

Eine positive Assertion stimmt mit ihrem Inhalt überein, verbraucht aber keine Zeichen in der Zielsequenz.

Beispiele

  • (=aa)(a*) entspricht der Zielsequenz "aaaa" und ordnet die Erfassungsgruppe 1 der Untermenge "aaaa"zu.

  • (aa)(a*) entspricht der Zielsequenz "aaaa" und ordnet die Erfassungsgruppe 1 am "aa" Anfang der Zielsequenz und der Erfassungsgruppe 2 am "aa" Ende der Zielsequenz zu.

  • (=aa)(a)|(a) entspricht der Zielsequenz "a" und ordnet die Erfassungsgruppe 1 einer leeren Sequenz zu (da die positive Assertion fehlgeschlagen ist) und der Erfassungsgruppe 2 mit der Unteranforderung "a". Sie entspricht auch der Zielsequenz "aa" und ordnet die Erfassungsgruppe 1 der Unter- "aa" und Aufnahmegruppe 2 einer leeren Sequenz zu.

Unicode-Escapesequenz

Eine Unicode-Escapesequenz ist ein umgekehrter Schrägstrich gefolgt von dem Buchstaben 'u' gefolgt von vier hexadezimalen Ziffern (0-9a-fA-F). Sie entspricht einem Zeichen in der Zielsequenz mit dem Wert, der durch die vier Ziffern angegeben wird. Entspricht beispielsweise der Zielsequenz"a", \u0041 wenn die ASCII-Zeichencodierung verwendet wird.

Platzhalterzeichen

Ein Wildcardzeichen entspricht einem beliebigen Zeichen im Zielausdruck, mit Ausnahme einer Neuzeile.

Wortbegrenzung

In den folgenden Situationen tritt eine Wortgrenze auf:

  • Das aktuelle Zeichen befindet sich am Anfang der Zielsequenz und ist eines der Wortzeichen. A-Za-z0-9_

  • Die aktuelle Zeichenposition liegt am Ende der Zielsequenz und das letzte Zeichen in der Zielsequenz ist eines der Wortzeichen.

  • Das aktuelle Zeichen ist eines der Wortzeichen, und das vorangehende Zeichen ist nicht.

  • Das aktuelle Zeichen ist keins der Wörter, und das vorangehende Zeichen ist.

Word-Begrenzungsbehauptung

Eine Wortbegrenzungs-Assertion stimmt überein, wenn sich die aktuelle Position in der Zielzeichenfolge unmittelbar hinter einer Wortgrenze befindet.

Abgleichen und Suchen

Damit ein regulärer Ausdruck einer Zielsequenz entspricht, muss der gesamte reguläre Ausdruck mit der gesamten Zielsequenz übereinstimmen. Beispielsweise entspricht der reguläre Ausdruck bcd der Zielsequenz "bcd" , stimmt aber nicht mit der Zielsequenz oder der Zielsequenz "abcd" überein "bcde".

Damit eine Suche mit regulären Ausdrücken erfolgreich ausgeführt werden kann, muss in der Zielsequenz, die dem regulären Ausdruck entspricht, eine Unterfunktion vorhanden sein. Die Suche findet in der Regel die am weitesten links übereinstimmende Untermenge.

Beispiele

  • Eine Suche nach dem regulären Ausdruck bcd in der Zielsequenz "bcd" ist erfolgreich und entspricht der gesamten Sequenz. Die gleiche Suche in der Zielsequenz "abcd" ist ebenfalls erfolgreich und entspricht den letzten drei Zeichen. Die gleiche Suche in der Zielsequenz "bcde" ist ebenfalls erfolgreich und entspricht den ersten drei Zeichen.

  • Eine Suche nach dem regulären Ausdruck bcd in der Zielsequenz "bcdbcd" ist erfolgreich und entspricht den ersten drei Zeichen.

Wenn mehr als eine Untermenge vorhanden ist, die an einer bestimmten Stelle in der Zielsequenz übereinstimmt, gibt es zwei Möglichkeiten zum Auswählen des übereinstimmenden Musters.

Bei der ersten Übereinstimmung wird die Untermenge ausgewählt, die zuerst gefunden wurde, wenn der reguläre Ausdruck übereinstimmt.

Die längste Übereinstimmung wählt die längste Untermenge aus den Übereinstimmungen an diesem Ort aus. Wenn mehr als eine Untermenge vorhanden ist, die die maximale Länge aufweist, wählt die längste Übereinstimmung die erste gefundene aus.

Wenn z. B. die erste Übereinstimmung verwendet wird, entspricht eine Suche nach dem regulären Ausdruck b|bc in der Zielsequenz "abcd" der Untermenge "b" , da der linke Ausdruck der Änderung mit diesem Unterwert übereinstimmt. Daher versucht die erste Übereinstimmung nicht den rechten Ausdruck der Änderung. Wenn die längste Übereinstimmung verwendet wird, werden dieselben Suchabfragen "bc" gefunden, da "bc" sie länger als "b"sind.

Eine partielle Übereinstimmung ist erfolgreich, wenn die Übereinstimmung das Ende der Zielsequenz erreicht, ohne fehlschlagen zu müssen, auch wenn sie das Ende des regulären Ausdrucks nicht erreicht hat. Daher kann das Anfügen von Zeichen an die Zielsequenz nach erfolgreichem Abgleich zu einem späteren Teilfehler führen. Wenn jedoch eine partielle Übereinstimmung fehlschlägt, kann das Anfügen von Zeichen an die Zielsequenz keine spätere teilweise Übereinstimmung bewirken. Wenn beispielsweise eine partielle Übereinstimmung vorliegt, ab entspricht die Zielsequenz "a" , aber nicht "ac".

Formatkennzeichnungen

ECMAScript Formatregeln Regeln für sed-Format Ersetzungstext
$& & Die Zeichensequenz, die dem gesamten regulären Ausdruck entspricht: [match[0].first, match[0].second)
$$ $
\& &
$`" (Dollarzeichen gefolgt von einem Rückkurs) Die Zeichensequenz, die der Untersequence vorausgeht, die dem regulären Ausdruck entspricht: [match.prefix().first, match.prefix().second)
$'" (Dollarzeichen gefolgt von Vorwärtskurs) Die Zeichensequenz, die auf die Untermenge folgt, die dem regulären Ausdruck entspricht: [match.suffix().first, match.suffix().second)
$n \n Die Zeichensequenz, die der Aufnahmegruppe an der Position nentspricht, wobei n eine Zahl zwischen 0 und 9 liegt: [match[n].first, match[n].second)
\\n \n
$nn Die Zeichensequenz, die der Aufnahmegruppe an der Position nnentspricht, wobei nn eine Zahl zwischen 10 und 99 liegt: [match[nn].first, match[nn].second)

Siehe auch

Übersicht über die C++-Standardbibliothek