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 des regulären Ausdrucks 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 dem gleichen Zeichen in der Zielsequenz entspricht.

  • Ein Wild Karte Zeichen, 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 Satz hinzu, der durch expr definiert wird.

    • Eine Äquivalenzklasse des Formulars [=elt=]. Fügt Sortierungselemente, die mit elt äquivalent sind, dem Satz hinzu, der durch expr definiert wird.

    • Ein Sortiersymbol des Formulars [.elt.]. Fügt das Sortierreihenfolgenelement elt dem Satz hinzu, der durch expr definiert wird.

  • Ein 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 Folge von Zeichen in der Zielsequenz, die anhand des Musters zwischen den Trennzeichen verglichen wird.

  • Ein eingeschränktes Dateiformat-Escapezeichen des Formulars \f, \n, , \r, \toder \v. Diese Zeichen entsprechen einem Seitenvorschub, einem Zeilenumbruch, einem Wagenrücklauf, einem horizontalen bzw. einem vertikalen Tabulator 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 zwei Hexadezimalzeichen hh dargestellt wird.

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

  • Eine Escapesequenz des Steuerelements des Formulars \ck. Entspricht dem Steuerzeichen, das durch das Zeichen k benannt wird.

  • Eine Wortbegrenzungsbehauptung des Formulars\b. Stimmt überein, wenn die aktuelle Position in der Zielsequenz unmittelbar hinter 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. Gibt einen Kurznamen für eine Zeichenklasse an.

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 Zeichen entsprechen einem umgekehrten Schrägstrich, einer Warnmeldung, einer Rücktaste, einem Seitenvorschub, einem Zeilenumbruch, einem Wagenrücklauf, einem horizontalen bzw. einem vertikalen Tabulator in der Zielsequenz.

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

Wiederholen

Auf jedes Element außer einer positiven Assertion, einer negativen Assertion oder einem 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".

Für eine Wiederholungsanzahl können auch folgende Formate verwendet werden:

  • {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 außer basic und grep können für eine Wiederholungsanzahl folgende Formate verwendet werden:

  • ? 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

Elemente des regulären Ausdrucks mit oder ohne Wiederholungsanzahl können verkettet werden, um längere reguläre Ausdrücke zu bilden. Der resultierende Ausdruck entspricht einer Zielsequenz, die eine Verkettung der Sequenzen ist, der die einzelnen Elemente entsprechen.

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".

Alternierung

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. Verkettete reguläre Ausdrücke können auf diese Weise in beliebiger Zahl kombiniert werden. Der resultierende Ausdruck entspricht jeder Zielsequenz, die mit mindestens einem verketteten regulären Ausdruck übereinstimmt.

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 ist ein Teilausdruck eine Verkettung. In den anderen Grammatiken für reguläre Ausdrücke ist ein Teilausdruck eine Alternierung.

Grammatikzusammenfassung

In der folgenden Tabelle sind die Funktionen zusammengefasst, die in 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 + +
Anker + + + + + +
Rückverweis + + +
Klammerausdruck + + + + + +
Erfassen einer Gruppe mithilfe von () + + + +
Erfassen einer Gruppe mithilfe von \(\) + +
Escapesequenz für Steuerzeichen +
DSW-Escapezeichen +
Dateiformat-Escapezeichen + +
Hexadezimale Escapesequenz +
Identitätsescapezeichen + + + + + +
Negative Assertion +
Negative Wortgrenzenassertion +
Nichterfassungsgruppe +
Nicht gierige Wiederholung +
Oktale Escapesequenz +
Normales Zeichen + + + + + +
Positive Assertion +
Wiederholung mit {} + + + +
Wiederholung mit \{\} + +
Wiederholung mit * + + + + + +
Wiederholung und ?+ + + + +
Unicode-Escapesequenz +
Platzhalterzeichen + + + + + +
Wortgrenzenassertion +

Semantische Details

Anker

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

Zurückverweis

Ein Rückverweis ist ein umgekehrter Schrägstrich, nach dem ein Dezimalwert n folgt. Er entspricht dem Inhalt der n-ten Erfassungsgruppe. Der Wert von N darf nicht mehr als die Anzahl von Erfassungsgruppen sein, die dem Rückverweis vorausgehen. In basic und grep wird der Wert N durch die Dezimalstelle bestimmt, die dem umgekehrten Schrägstrich folgt. In ECMAScript wird der Wert N von allen Dezimalstellen bestimmt, die dem umgekehrten Schrägstrich unmittelbar folgen. Daher überschreitet der Wert N in basic und grep nie den Wert 9, auch wenn der reguläre Ausdruck über mehr als neun Erfassungsgruppen verfügt. In ECMAScript ist der Wert N unbegrenzt.

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. Er entspricht der zehnten Erfassungsgruppe, d. h. der innersten.

Klammerausdruck

Ein Klammerausdruck definiert einen Satz von Zeichen und Sortierungselementen. 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 dem aktuellen Zeichen in der Zielsequenz entspricht.

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

Gruppe erfassen

Eine Erfassungsgruppe markiert ihren Inhalt als einzelne Einheit in der Grammatik für reguläre Ausdrücke und versieht den Zieltext, der dem Inhalt entspricht, mit einer Bezeichnung. Die Bezeichnung, die den einzelnen Erfassungsgruppen zugeordnet ist, ist eine Zahl, die bestimmt wird, indem die öffnenden Klammern, die Erfassungsgruppen markieren, bis einschließlich der öffnenden Klammer, die die aktuelle Erfassungsgruppe markiert, gezählt werden. In dieser Implementierung ist 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 erkannt, indem id = traits.lookup_classname aufgerufen wird. Ein Zeichen ch gehört einer solchen Klasse an, wenn traits.isctype(ch, id) "true" zurückgibt. Die standardmäßige regex_traits-Vorlage unterstützt die Klassennamen in der folgenden Tabelle.

Klassenname Beschreibung
alnum Kleinbuchstaben, Großbuchstaben und Ziffern
alpha Kleinbuchstaben und Großbuchstaben
blank Leerzeichen oder Tabstopp
cntrl die Dateiformat-Escapezeichen
digit Zahlen
graph Kleinbuchstaben, Großbuchstaben, Ziffern und Interpunktion
lower Kleinbuchstaben
print Kleinbuchstaben, Großbuchstaben, Ziffern, Interpunktion 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 in dem 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 der 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 gebietsschemaabhängige Bereiche verwendet werden, werden die Zeichen in einem Bereich von den Sortierreihenfolgenregeln für das Gebietsschema bestimmt. Zeichen, die nach dem ersten Zeichen in der Definition des Bereichs und vor das letzte Zeichen der Definition des Bereichs sortiert werden, befinden sich im Satz. Die beiden Endzeichen befinden sich ebenfalls im Satz.

Collating-Element

Ein Sortierungselement ist eine Sequenz mit mehreren Zeichen, die als einzelnes Zeichen behandelt wird.

Sortiersymbol

Ein Sortierungssymbol in einem Klammerausdruck fügt dem Satz, der durch den Klammerausdruck definiert wird, ein Sortierungselement 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'. Sie entspricht dem ASCII-Steuerzeichen, das von diesen Buchstaben benannt wird. Entspricht z "\ci" . B. der Zielsequenz "\x09", da STRG+I den Wert 0x09aufweist.

DSW-Zeichen escape

Ein DSW-Escapezeichen ist ein Kurzname für eine Zeichenklasse, wie in der folgenden Tabelle dargestellt.

Escapesequenz Äquivalente benannte Klasse Standardmäßige benannte Klasse
\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 dem Satz, der durch den Klammerausdruck definiert wird, alle Zeichen und Sortierungselemente hinzu, die dem Sortierungselement in der Äquivalenzklassendefinition entsprechen.

Um eine Äquivalenzklasse zu erstellen, verwenden Sie [= gefolgt von einem Sortierelement, gefolgt von =]. Intern sind zwei Sortierungselemente elt1 und elt2 äquivalent, 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). Sie entspricht einem Zeichen in der Zielsequenz mit dem Wert, der durch die zwei Ziffern angegeben wird.

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

Identitäts escape

Ein Identitätsescapezeichen ist ein umgekehrter Schrägstrich, auf den ein einzelnes Zeichen folgt. 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ätsescapezeichen zulässig sind, hängt von der Grammatik für die regulären Ausdrücke ab, wie in der folgenden Tabelle dargestellt.

Grammatik Zulässige Identitätsescapezeichen
basic, grep { (){}.[\*^$ }
extended, egrep { (){.[\*^$+?| }
awk, extended plus { "/ }
ECMAScript Alle Zeichen außer denjenigen, die Bestandteil 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 entspricht allem, außer ihrem Inhalt. 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 nutzt die kürzeste Untersequenz der Zielsequenz, die dem Muster entspricht. Eine gierige Wiederholung verwendet die längste Untersequenz. 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 Oktalziffern (0-7). Sie entspricht einem Zeichen in der Zielsequenz mit dem Wert, 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 haben die folgenden Zeichen eine besondere Bedeutung:

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

In basic und grep haben die folgenden Zeichen eine besondere Bedeutung:

  • . [ \

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, egrep und awk haben die folgenden Zeichen eine besondere Bedeutung:

  • . [ \ ( * + ? { |

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 dem gleichen Zeichen in der Zielsequenz. Standardmäßig heißt das, dass die Übereinstimmung erfolgreich ist, wenn die beiden Zeichen durch den gleichen Wert dargestellt werden. In einer Übereinstimmung ohne Beachtung der Groß-/Kleinschreibung stimmen zwei Zeichen ch0 und ch1 überein, wenn traits.translate_nocase(ch0) == traits.translate_nocase(ch1). In einer Übereinstimmung unter Beachtung des Gebietsschemas stimmen zwei Zeichen ch0 und ch1 überein, 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.

Platzhalter

Ein Platzhalterzeichen entspricht jedem Zeichen im Zielausdruck außer einem Zeilenumbruch.

Word-Grenze

Eine Wortgrenze tritt in den folgenden Fällen auf:

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

  • Die aktuelle Zeichenposition liegt hinter dem Ende der Zielsequenz und das letzte Zeichen 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 Wortgrenzenassertion stimmt überein, wenn die aktuelle Position in der Zielzeichenfolge nicht unmittelbar hinter einer Wortgrenze liegt.

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ärem Ausdruck erfolgt, muss eine Untersequenz in der Zielsequenz vorhanden sein, die dem regulären Ausdruck entspricht. Die Suche ergibt in der Regel die äußerst linke entsprechende Untersequenz.

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.

Die erste Übereinstimmung wählt die Untersequenz aus, die zuerst gefunden wurde, wenn der reguläre Ausdruck übereinstimmt.

Die längste Übereinstimmung wählt die längste Untersequenz aus den Sequenzen aus, die an dieser Position übereinstimmen. 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. Nachdem eine partielle Übereinstimmung erfolgreich ist, kann das Anhängen von Zeichen an die Zielsequenz daher dazu führen, dass bei einer späteren partiellen Übereinstimmung ein Fehler auftritt. 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 sed-Formatierungsregeln 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