Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
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 Ausdruckexprdefinierten Gruppe oder des Formulars[^expr]befindet, die einem Zeichen oder einem Sortierungselement in der Zielsequenz entspricht, die nicht in der durch den Ausdruckexprdefinierten Menge enthalten ist.Der Ausdruck
exprkann 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 durchexprdefinierten Satz hinzu.Eine Zeichenklasse des Formulars
[:name:]. Fügt die Zeichen in der benannten Klasse dem vonexpr.Eine Äquivalenzklasse des Formulars
[=elt=]. Fügt die Sortierelemente hinzu, die dem durch definiertenexprSatz entsprechenelt.Ein Sortiersymbol des Formulars
[.elt.]. Fügt das Sortierungselementeltdem durchexpr.
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 Zeichenkin der Zielsequenz entspricht.
Beispiele
aentspricht 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 hexadezimalenhhZiffern dargestellt wird.Eine Unicode-Escapesequenz des Formulars
\uhhhh. Entspricht einem Zeichen in der Zielsequenz, das durch die vier hexadezimalenhhhhZiffern dargestellt wird.Eine Escapesequenz des Steuerelements des Formulars
\ck. Entspricht dem Steuerelementzeichen, das vom Zeichenkbenannt 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)aentspricht 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)astimmt 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 Ziffernooodargestellt 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+)\3entspricht der Zielsequenz"aabbbcbbb". Der Rückverweis\3entspricht dem Text in der dritten Aufnahmegruppe, d. h. dem"(b+)". Sie stimmt nicht mit der Zielsequenz überein"aabbbcbb".(a)\2ist ungültig.(b(((((((((a))))))))))\10hat 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(bund endet und vor dem Rückbezug kommt), und das letzte0entspricht 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(hist codiert als0x88undkist codiert als0x92). 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
[]aist 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
[]aentspricht 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
bcdin 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
bcdin 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) |