Delen via


Reguliere expressies (C++)

De C++-standaardbibliotheek ondersteunt meerdere grammatica's voor reguliere expressies. In dit onderwerp worden de grammaticavariaties besproken die beschikbaar zijn bij het gebruik van reguliere expressies.

Grammatica van reguliere expressies

De grammatica van de reguliere expressie die moet worden gebruikt, wordt opgegeven door het gebruik van een van de std::regex_constants::syntax_option_type opsommingswaarden. Deze grammatica's voor reguliere expressies worden gedefinieerd in std::regex_constants:

  • ECMAScript: Dit is het dichtst bij de grammatica die wordt gebruikt door JavaScript en de .NET-talen.
  • basic: De reguliere POSIX-expressies basic of BRE.
  • extended: De reguliere POSIX-expressies extended of ERE.
  • awk: Dit is extended, maar er zijn meer escapes voor niet-afdrukbare tekens.
  • grep: Dit is basic, maar hiermee kunnen nieuwe regeltekens (\n) ook alternations worden gescheiden.
  • egrep: Dit is extended, maar het staat ook toe dat nieuwe regeltekens alternations van elkaar scheiden.

Als er standaard geen grammatica is opgegeven, ECMAScript wordt ervan uitgegaan. Er kan slechts één grammatica worden opgegeven.

Er kunnen ook verschillende vlaggen worden toegepast:

  • icase: Negeer hoofdletters bij het vergelijken.
  • nosubs: Gemarkeerde overeenkomsten negeren (dat wil gezegd, expressies tussen haakjes); er worden geen vervangingen opgeslagen.
  • optimize: Maak de afstemming sneller, ten koste van een grotere bouwtijd.
  • collate: Gebruik landinstellingengevoelige sorteringsreeksen (bijvoorbeeld bereiken van het formulier [a-z]).

Nul of meer vlaggen kunnen worden gecombineerd met de grammatica om het gedrag van de engine voor reguliere expressies op te geven. Als er alleen vlaggen worden opgegeven, ECMAScript wordt uitgegaan van de grammatica.

Onderdeel

Een element kan een van de volgende zijn:

  • Een gewoon teken dat overeenkomt met hetzelfde teken in de doelreeks.

  • Een jokerteken'.' dat overeenkomt met een willekeurig teken in de doelreeks, behalve een nieuwe regel.

  • Een haakje-expressie van het formulier [expr], die overeenkomt met een teken of een sorteringselement in de doelreeks die ook in de set staat die is gedefinieerd door de expressie expr, of van het formulier [^expr], dat overeenkomt met een teken of een sorteringselement in de doelreeks die niet in de set is gedefinieerd door de expressie expr.

    De expressie expr kan elke combinatie van het volgende bevatten:

    • Een afzonderlijk teken. Hiermee voegt u het teken toe aan de set die is gedefinieerd door expr.

    • Een tekenbereik van het formulier ch1-ch2. Hiermee voegt u de tekens toe die worden vertegenwoordigd door waarden in het gesloten bereik [ch1, ch2] aan de set die is gedefinieerd door expr.

    • Een tekenklasse van het formulier [:name:]. Voegt de tekens in de benoemde klasse toe aan de set die is gedefinieerd door expr.

    • Een gelijkwaardigheidsklasse van het formulier [=elt=]. Hiermee worden de samenvouwbare elementen toegevoegd die gelijk zijn aan elt de set die is gedefinieerd door expr.

    • Een verzamelsymbool van het formulier [.elt.]. Voegt het sorteringselement elt toe aan de set die is gedefinieerd door expr.

  • Een anker. Anker ^ komt overeen met het begin van de doelreeks. Anker $ komt overeen met het einde van de doelreeks.

  • Een vastleggende groep van het formulier (subexpressie) of \(subexpressie\) in basic en grep, die overeenkomt met de reeks tekens in de doelreeks die overeenkomt met het patroon tussen de scheidingstekens.

  • Een identiteitsvlucht van het formulier \k, dat overeenkomt met het teken k in de doelreeks.

Examples:

  • a komt overeen met de doelreeks "a" , maar komt niet overeen met de doelreeksen "B", "b"of "c".

  • . komt overeen met alle doelreeksen "a", "B", "b"en "c".

  • [b-z] komt overeen met de doelreeksen "b" en "c" komt niet overeen met de doelreeksen "a" of "B".

  • [:lower:] komt overeen met de doelreeksen "a", "b"maar "c" komt niet overeen met de doelreeks "B".

  • (a) komt overeen met de doelreeks "a" en koppelt capturegroep 1 aan de subsequence "a", maar komt niet overeen met de doelreeksen "B", "b"of "c".

In ECMAScript, basicen, en grep, een element kan ook een back-verwijzing van het formulier \ddzijn, waarbij dd een decimaalwaarde N vertegenwoordigt die overeenkomt met een reeks tekens in de doelreeks die gelijk is aan de reeks tekens die overeenkomen met de Nde capture-groep.

Komt bijvoorbeeld (a)\1 overeen met de doelreeks "aa" omdat de eerste (en alleen) capturegroep overeenkomt met de eerste reeks "a" en vervolgens de \1 uiteindelijke reeks "a".

In ECMAScriptkan een element ook een van de volgende zijn:

  • Een niet-vastleggende groep van het formulier (?: subexpressie). Komt overeen met de reeks tekens in de doelreeks die overeenkomt met het patroon tussen de scheidingstekens.

  • Een beperkte bestandsindeling van het formulier\f, , \n, \rof \t\v. Deze komen overeen met een formulierfeed, nieuwe regel, regelterugloop, horizontale tab en verticale tab in de doelvolgorde.

  • Een positieve assertie van het formulier (= subexpressie). Komt overeen met de reeks tekens in de doelreeks die overeenkomt met het patroon tussen de scheidingstekens, maar wijzigt niet de positie van de overeenkomst in de doelreeks.

  • Een negatieve assertie van het formulier (! subexpressie). Komt overeen met een reeks tekens in de doelreeks die niet overeenkomt met het patroon tussen de scheidingstekens en wijzigt de positie van de overeenkomst in de doelreeks niet.

  • Een hexadecimale escapereeks van het formulier \xhh. Komt overeen met een teken in de doelreeks die wordt vertegenwoordigd door de twee hexadecimale hhcijfers.

  • Een Unicode-escapereeks van het formulier \uhhhh. Komt overeen met een teken in de doelreeks die wordt vertegenwoordigd door de vier hexadecimale hhhhcijfers.

  • Een escapereeks voor besturingselementen van het formulier \ck. Komt overeen met het besturingselement dat wordt genoemd door het teken k.

  • Een woordgrens assertie van het formulier \b. Komt overeen wanneer de huidige positie in de doelreeks direct na een woordgrens valt.

  • Een negatieve woordgrens assertie van het formulier \B. Komt overeen wanneer de huidige positie in de doelreeks niet direct na een woordgrens valt.

  • Een dsw teken escape van het formulier \d, , \D, \s, \S, \w, . \W Geeft een korte naam op voor een tekenklasse.

Examples:

  • (?:a) komt overeen met de doelreeks "a", maar "(?:a)\1" is ongeldig omdat er geen capturegroep 1 is.

  • (=a)a komt overeen met de doelreeks "a". De positieve assert komt overeen met de eerste reeks "a" in de doelreeks en de laatste "a" in de reguliere expressie komt overeen met de eerste reeks "a" in de doelreeks.

  • (!a)a komt niet overeen met de doelreeks "a".

  • a\b. komt overeen met de doelreeks "a~", maar komt niet overeen met de doelreeks "ab".

  • a\B. komt overeen met de doelreeks "ab", maar komt niet overeen met de doelreeks "a~".

In awkkan een element ook een van de volgende zijn:

  • Een bestandsindeling van het formulier\\, , \a, \b, \f\n, , \rof \t\v. Deze komen overeen met een backslash, waarschuwing, backspace, formulierfeed, newline, regelterugloop, horizontale tab en verticale tab, respectievelijk in de doelreeks.

  • Een octale escapereeks van het formulier \ooo. Komt overeen met een teken in de doelreeks waarvan de weergave de waarde is die wordt vertegenwoordigd door de ene, twee of drie octale cijfers ooo.

Herhaling

Elk ander element dan een positieve assertie, een negatieve assertie of een anker kan worden gevolgd door een herhalingsaantal. Het meest algemene soort herhalingsaantal heeft de vorm {min,max} of \{min,max\} in basic en .grep Een element dat wordt gevolgd door deze vorm van herhalingsaantal komt overeen met ten minste minimale opeenvolgende exemplaren en niet meer dan het maximum aantal opeenvolgende exemplaren van een reeks die overeenkomt met het element.

Komt bijvoorbeeld a{2,3} overeen met de doelreeks "aa" en de doelreeks "aaa", maar niet de doelreeks "a" of de doelreeks "aaaa".

Een herhalingsaantal kan ook een van de volgende vormen aannemen:

  • {min} of \{min} in basic en grep. Gelijk aan {min,min}.

  • {min,} of \{min,\} in basic en grep. Gelijk aan {min,niet-afhankelijk}.

  • * is gelijk aan {0,niet-afhankelijk}.

Examples:

  • a{2} komt overeen met de doelreeks, maar niet de doelreeks "aa""a" of de doelreeks "aaa".

  • a{2,}komt overeen met de doelreeks, de doelreeks"aa""aaa", enzovoort, maar komt niet overeen met de doelreeks"a".

  • a*komt overeen met de doelreeks, de doelreeks"""a", de doelreeks"aa", enzovoort.

Voor alle grammatica's behalve basic en grepkan een herhalingsaantal ook een van de volgende vormen aannemen:

  • ? is equivalent aan {0,1}.

  • + is gelijk aan {1, niet-afhankelijk}.

Examples:

  • a? komt overeen met de doelreeks "" en de doelreeks "a", maar niet de doelreeks "aa".

  • a+komt overeen met de doelreeks, de doelreeks"a""aa", enzovoort, maar niet de doelreeks"".

In ECMAScriptkunnen alle vormen van herhalingen worden gevolgd door het teken ? dat een niet-greedy herhaling aanwijst.

Samenvoegen

Reguliere expressie-elementen, met of zonder herhalingen, kunnen worden samengevoegd om langere reguliere expressies te vormen. De resulterende expressie komt overeen met een doelreeks die een samenvoeging is van de reeksen die overeenkomen met de afzonderlijke elementen.

Komt bijvoorbeeld a{2,3}b overeen met de doelreeks "aab" en de doelreeks "aaab", maar komt niet overeen met de doelreeks "ab" of de doelreeks "aaaab".

Afwisseling

In alle grammatica's van reguliere expressies behalve basic en grepkan een samengevoegde reguliere expressie worden gevolgd door het teken | (pipe) en een andere samengevoegde reguliere expressie. Een willekeurig aantal samengevoegde reguliere expressies kan op deze manier worden gecombineerd. De resulterende expressie komt overeen met een doelreeks die overeenkomt met een of meer van de samengevoegde reguliere expressies.

Wanneer meer dan een van de samengevoegde reguliere expressies overeenkomen met de doelvolgorde, ECMAScript kiest u de eerste van de samengevoegde reguliere expressies die overeenkomen met de reeks als de overeenkomst, die de eerste overeenkomst wordt genoemd. De andere reguliere expressie-grammatica's kiezen de grammatica die de langste overeenkomst bereikt.

Komt bijvoorbeeld ab|cd overeen met de doelreeks "ab" en de doelreeks "cd", maar komt niet overeen met de doelreeks "abd" of de doelreeks "acd".

In grep en egrepkan een nieuw regelteken (\n) worden gebruikt om alternations te scheiden.

Subexpressie

In basic en grep, een subexpressie is een samenvoeging. In de andere reguliere expressie-grammatica's is een subexpressie een alternatie.

Grammaticaoverzicht

De volgende tabel bevat een overzicht van de functies die beschikbaar zijn in de verschillende grammatica's voor reguliere expressies:

Onderdeel basic extended ECMAScript grep egrep awk
alternation using | + + + +
alternation using \n + +
anchor + + + + + +
naslaginformatie terug + + +
vierkante haak-expressie + + + + + +
groep vastleggen met behulp van () + + + +
groep vastleggen met behulp van \(\) + +
escapereeks voor besturingselementen +
dsw-teken escape +
escape voor bestandsindeling + +
hexadecimale escapereeks +
escape voor identiteit + + + + + +
negatieve assertie +
negatieve woordgrens assertie +
niet-vastleggende groep +
niet-greedy herhaling +
octale escapereeks +
gewoon teken + + + + + +
positieve assertie +
herhaling met {} + + + +
herhaling met \{\} + +
herhaling met * + + + + + +
herhaling met behulp van ? en + + + + +
Unicode-escapereeks +
Jokerteken + + + + + +
woordgrens assertie +

Semantische details

Anchor

Een anker komt overeen met een positie in de doeltekenreeks, niet met een teken. Een ^ komt overeen met het begin van de doeltekenreeks en een $ komt overeen met het einde van de doeltekenreeks.

Naslaginformatie terug

Een back-verwijzing is een backslash die wordt gevolgd door een decimale waarde N. Deze komt overeen met de inhoud van de groep Nth Capture. De waarde van N mag niet meer zijn dan het aantal capturegroepen dat voorafgaat aan de back-verwijzing. In basic en grepwordt de waarde van N bepaald door het decimale cijfer dat de backslash volgt. In ECMAScriptwordt de waarde van N bepaald door alle decimale cijfers die direct volgen op de backslash. basic grepDaarom is de waarde van N nooit meer dan 9, zelfs als de reguliere expressie meer dan negen capturegroepen heeft. In ECMAScriptis de waarde van N niet-afhankelijk.

Examples:

  • ((a+)(b+))(c+)\3 komt overeen met de doelreeks "aabbbcbbb". De back-verwijzing \3 komt overeen met de tekst in de derde capturegroep, dat wil gezegd: de "(b+)". Deze komt niet overeen met de doelvolgorde "aabbbcbb".

  • (a)\2 is niet geldig.

  • (b(((((((((a))))))))))\10 heeft verschillende betekenissen in basic en in ECMAScript. In basic, de back-verwijzing is \1. De back-verwijzing komt overeen met de inhoud van de eerste capture-groep (de groep die begint met (b en eindigt met de laatste ) en eindigt vóór de back-verwijzing), en de laatste 0 komt overeen met het gewone teken 0. In ECMAScript, de back-verwijzing is \10. Het komt overeen met de tiende opnamegroep, dat wil gezegd, de binnenste groep.

Vierkante haak-expressie

Een haakjesexpressie definieert een set tekens en het samenvouwen van elementen. Wanneer de haakexpressie begint met het teken ^ , slaagt de overeenkomst als er geen elementen in de set overeenkomen met het huidige teken in de doelreeks. Anders slaagt de overeenkomst als een van de elementen in de set overeenkomt met het huidige teken in de doelreeks.

De reeks tekens kan worden gedefinieerd door een combinatie van afzonderlijke tekens, tekenbereiken, tekenklassen, gelijkwaardigheidsklassen en samenvoegsymbolen weer te geven.

Groep vastleggen

Een capture-groep markeert de inhoud als één eenheid in de grammatica van de reguliere expressie en labelt de doeltekst die overeenkomt met de inhoud. Het label dat aan elke capturegroep is gekoppeld, is een getal, dat wordt bepaald door het tellen van de haakjes openen die opnamegroepen markeren tot en met het haakje openen dat de huidige opnamegroep markeert. In deze implementatie is het maximum aantal capturegroepen 31.

Examples:

  • ab+ komt overeen met de doelreeks "abb", maar komt niet overeen met de doelreeks "abab".

  • (ab)+ komt niet overeen met de doelreeks "abb", maar komt overeen met de doelreeks "abab".

  • ((a+)(b+))(c+) komt overeen met de doelreeks "aabbbc" en koppelt capture groep 1 aan de subsequence "aabbb", capture group 2 met de subsequence "aa", capture group 3 met "bbb"en capture group 4 met de subsequence "c".

Tekenklasse

Een tekenklasse in een haakexpressie voegt alle tekens in de benoemde klasse toe aan de tekenset die is gedefinieerd door de haakexpressie. Als u een tekenklasse wilt maken, gebruikt [: u gevolgd door de naam van de klasse, gevolgd door :].

Intern worden namen van tekenklassen herkend door aan te roepen id = traits.lookup_classname. Een teken ch behoort tot een dergelijke klasse als traits.isctype(ch, id) deze waar retourneert. De standaardsjabloon regex_traits ondersteunt de klassenamen in de volgende tabel.

Klassenaam Description
alnum kleine letters, hoofdletters en cijfers
alpha kleine letters en hoofdletters
blank spatie of tabblad
cntrl escapetekens voor de bestandsindeling
digit Cijfers
graph kleine letters, hoofdletters, cijfers en leestekens
lower kleine letters
print kleine letters, hoofdletters, cijfers, leestekens en spatie
punct interpunctie
space ruimte
upper hoofdletters
xdigit cijfers, a, , b, c, d, e, f, A, B, CDEF
d hetzelfde als digit
s hetzelfde als space
w hetzelfde als alnum

Tekenbereik

Met een tekenbereik in een haakexpressie worden alle tekens in het bereik toegevoegd aan de tekenset die is gedefinieerd door de haakexpressie. Als u een tekenbereik wilt maken, plaatst u het teken '-' tussen de eerste en laatste tekens in het bereik. Een tekenbereik plaatst alle tekens met een numerieke waarde die meer dan of gelijk is aan de numerieke waarde van het eerste teken en kleiner dan of gelijk aan de numerieke waarde van het laatste teken, in de set. U ziet dat deze set toegevoegde tekens afhankelijk is van de platformspecifieke weergave van tekens. Als het teken '-' zich aan het begin of einde van een haakexpressie voordoet, of als het eerste of laatste teken van een tekenbereik, staat het voor zichzelf.

Examples:

  • [0-7] vertegenwoordigt de set tekens { 0, 1, 2, 3, 4, , 5, , 6} 7 . Het komt overeen met de doelreeksen "0", "1"enzovoort, maar niet "a".

  • Op systemen die ASCII-tekencodering gebruiken, [h-k] vertegenwoordigt u de set tekens { h, i, j, } k . Het komt overeen met de doelreeksen "h", "i"enzovoort, maar niet "\x8A" of "0".

  • Op systemen die EBCDIC-tekencodering gebruiken, [h-k] vertegenwoordigt u de set tekens { h, i, '\x8A', '\x8B', '\x8C', '\x8E''\x8D''\x8F', '\x90', , } kj(h wordt gecodeerd als 0x88 en k wordt gecodeerd als ).0x92 Het komt overeen met de doelreeksen "h", "i"enzovoort "\x8A", maar niet "0".

  • [-0-24] vertegenwoordigt de set tekens { -, 0, 1, , 2} 4 .

  • [0-2-] vertegenwoordigt de set tekens { 0, 1, 2, - }.

  • Op systemen die ASCII-tekencodering gebruiken, [+--] vertegenwoordigt u de set tekens { +,- }.

Wanneer landinstellingengevoelige bereiken echter worden gebruikt, worden de tekens in een bereik bepaald door de sorteringsregels voor de landinstelling. Tekens die na het eerste teken in de definitie van het bereik en vóór het laatste teken in de definitie van het bereik liggen, bevinden zich in de set. De twee eindtekens bevinden zich ook in de set.

Het element samenvouwen

Een samenvouwingselement is een reeks met meerdere tekens die wordt behandeld als één teken.

Symbool voor samenvouwen

Met een samenvouwbare symbool in een haakexpressie wordt een samenvouwingselement toegevoegd aan de set die is gedefinieerd door de haakexpressie. Als u een samenvouwtsymbool wilt maken, gebruikt [. u gevolgd door het samenvouwende element, gevolgd door .]

Escape-reeks besturingselementen

Een escape-reeks besturingselementen is een backslash gevolgd door de letter 'c' gevolgd door een van de letters 'a' door 'z' of 'A' door 'Z'. Het komt overeen met het ASCII-besturingselement dat door die letter wordt genoemd. Komt bijvoorbeeld "\ci" overeen met de doelreeks "\x09", omdat Ctrl+I de waarde 0x09heeft.

DSW-teken escape

Een escapeteken voor dsw is een korte naam voor een tekenklasse, zoals wordt weergegeven in de volgende tabel.

Escape-reeks Equivalent benoemde klasse Standaard benoemde 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-tekenset

Gelijkwaardigheidsklasse

Een equivalentieklasse in een haakexpressie voegt alle tekens toe en voegt elementen toe die gelijk zijn aan het samenvouwbare element in de definitie van de equivalentieklasse voor de set die is gedefinieerd door de haakexpressie.

Als u een gelijkwaardigheidsklasse wilt maken, gebruikt [= u gevolgd door een samenvouwend element gevolgd door =]. Intern twee samenvouwende elementen elt1 en elt2 zijn gelijkwaardig als traits.transform_primary(elt1.begin(), elt1.end()) == traits.transform_primary(elt2.begin(), elt2.end()).

Escape voor bestandsindeling

Een escape-bestandsindeling bestaat uit de gebruikelijke escapereeksen voor C-tekens, \\, \a\b\f, \n, \r, . \t\v Deze hebben de gebruikelijke betekenissen, dat wil zeggen backslash, waarschuwing, backspace, formulierfeed, newline, regelterugloop, horizontale tab en verticale tab, respectievelijk. In ECMAScripten \a\b zijn niet toegestaan. (\\ is toegestaan, maar het is een escape voor identiteit, geen escape in een bestandsindeling).

Hexadecimale escapereeks

Een hexadecimale escapereeks is een backslash gevolgd door de letter x gevolgd door twee hexadecimale cijfers (0-9a-fA-F). Het komt overeen met een teken in de doelreeks met de waarde die is opgegeven door de twee cijfers.

Komt bijvoorbeeld "\x41" overeen met de doelreeks "a" wanneer ASCII-tekencodering wordt gebruikt.

Escape voor identiteit

Een identiteits escape is een backslash gevolgd door één teken. Het komt overeen met dat teken. Dit is vereist wanneer het teken een speciale betekenis heeft. Als u de escape-id gebruikt, wordt de speciale betekenis verwijderd. Voorbeeld:

  • a* komt overeen met de doelreeks "aaa", maar komt niet overeen met de doelreeks "a*".

  • a\* komt niet overeen met de doelreeks "aaa", maar komt overeen met de doelreeks "a*".

De set tekens die zijn toegestaan in een escape-id, is afhankelijk van de grammatica van de reguliere expressie, zoals wordt weergegeven in de volgende tabel.

Grammatica Toegestane escapetekens voor identiteit
basic, grep { ($^*[}\){.}
extended, egrep { (|?+$^\.*){[}
awk, extended plus { "/ }
ECMAScript Alle tekens behalve tekens die deel kunnen uitmaken van een id. Dit omvat meestal letters, cijfers, $en _unicode-escapereeksen. Zie de ECMAScript taalspecificatie voor meer informatie.

Afzonderlijk teken

Een afzonderlijk teken in een haakexpressie voegt dat teken toe aan de tekenset die is gedefinieerd door de haakexpressie. Een expressie tussen haakjes, behalve aan het begin, vertegenwoordigt zichzelf ^ .

Examples:

  • [abc] komt overeen met de doelreeksen "a", "b"en "c", maar niet met de reeks "d".

  • [^abc] komt overeen met de doelreeks "d", maar niet de doelreeksen "a", "b"of "c".

  • [a^bc]komt overeen met de doelreeksen , en , en "^", maar niet de doelreeks "d". "c""b""a"

In alle grammatica's van reguliere expressies, behalve ECMAScriptals a ] het eerste teken is dat volgt op de opening [ of het eerste teken dat volgt op een eerste ^teken, vertegenwoordigt het zichzelf.

Examples:

  • []a is ongeldig omdat de expressie voor vierkante haken niet ] kan worden beëindigd.

  • []abc]komt overeen met de doelreeksen , en , en "]", maar niet de doelreeks "d". "c""b""a"

  • [^]abc]komt overeen met de doelreeks"d", maar niet de doelreeksen"a", "b"of "]""c".

Gebruik \] dit ECMAScriptom het teken ] in een haakje-expressie weer te geven.

Examples:

  • []a komt overeen met de doelreeks "a" omdat de haakexpressie leeg is.

  • [\]abc] komt overeen met de doelreeksen "a", "b"en "c"niet "]" de doelreeks "d".

Negatieve assertie

Een negatieve assert komt overeen met alles behalve de inhoud. Er worden geen tekens in de doelreeks gebruikt.

Komt bijvoorbeeld (!aa)(a*) overeen met de doelreeks "a" en koppelt capturegroep 1 aan de subsequence "a". Deze komt niet overeen met de doelreeks "aa" of de doelreeks "aaa".

Negatieve woordgrens assertie

Een negatieve woordgrens assertie komt overeen als de huidige positie in de doeltekenreeks zich niet direct na een woordgrens bevindt.

Groep die niet is vastgelegd

Een niet-vastleggende groep markeert de inhoud als één eenheid in de grammatica van de reguliere expressie, maar labelt de doeltekst niet.

Komt bijvoorbeeld (a)(?:b)*(c) overeen met de doeltekst "abbc" en koppelt capturegroep 1 aan de subsequence "a" en leg groep 2 vast met de subsequence "c".

Niet-hebzuchtige herhaling

Een niet-greedy herhaling verbruikt de kortste subsequence van de doelreeks die overeenkomt met het patroon. Een hebzuchtige herhaling verbruikt het langst. Komt bijvoorbeeld (a+)(a*b) overeen met de doelreeks "aaab".

Wanneer een niet-greedy herhaling wordt gebruikt, koppelt het vastleggen van groep 1 aan het "a" begin van de doelreeks en legt groep 2 vast met de subsequence "aab" aan het einde van de doelreeks.

Wanneer een greedy match wordt gebruikt, koppelt het capture groep 1 aan de subsequence "aaa" en legt groep 2 vast aan de subsequence "b".

Octale escapereeks

Een octale escapereeks is een backslash gevolgd door één, twee of drie octale cijfers (0-7). Het komt overeen met een teken in de doelreeks met de waarde die is opgegeven door deze cijfers. Als alle cijfers zijn 0, is de reeks ongeldig.

Komt bijvoorbeeld \101 overeen met de doelreeks "a" wanneer ASCII-tekencodering wordt gebruikt.

Gewoon teken

Een gewoon teken is een geldig teken dat geen speciale betekenis heeft in de huidige grammatica.

In ECMAScripthebben de volgende tekens speciale betekenissen:

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

In basic en grep, de volgende tekens hebben speciale betekenissen:

  • . [ \

basic grepDe volgende tekens hebben ook speciale betekenissen wanneer ze in een bepaalde context worden gebruikt:

  • * heeft in alle gevallen een speciale betekenis, behalve wanneer het het eerste teken is in een reguliere expressie of het eerste teken dat volgt op een eerste ^ in een reguliere expressie, of wanneer het het eerste teken is van een capturegroep of het eerste teken dat volgt op een initial in ^ een capture-groep.

  • ^ heeft een speciale betekenis wanneer het het eerste teken van een reguliere expressie is.

  • $ heeft een speciale betekenis wanneer het het laatste teken van een reguliere expressie is.

In extended, egrepen awk, hebben de volgende tekens speciale betekenissen:

  • . [ \ ( * + ? { |

Ook in extended, egrepen , en awk, de volgende tekens hebben speciale betekenissen wanneer ze in een bepaalde context worden gebruikt.

  • ) heeft een speciale betekenis wanneer deze overeenkomt met een voorgaande (

  • ^ heeft een speciale betekenis wanneer het het eerste teken van een reguliere expressie is.

  • $ heeft een speciale betekenis wanneer het het laatste teken van een reguliere expressie is.

Een gewoon teken komt overeen met hetzelfde teken in de doelreeks. Dit betekent standaard dat de overeenkomst slaagt als de twee tekens worden vertegenwoordigd door dezelfde waarde. In een niet-hoofdlettergevoelige overeenkomst, twee tekens ch0 en ch1 overeenkomst als traits.translate_nocase(ch0) == traits.translate_nocase(ch1). In een landinstellingengevoelige overeenkomst, twee tekens ch0 en ch1 overeenkomst als traits.translate(ch0) == traits.translate(ch1).

Positieve assertie

Een positieve assert komt overeen met de inhoud ervan, maar verbruikt geen tekens in de doelreeks.

Examples:

  • (=aa)(a*) komt overeen met de doelreeks "aaaa" en koppelt capturegroep 1 aan de subsequence "aaaa".

  • (aa)(a*) komt overeen met de doelreeks "aaaa" en koppelt capturegroep 1 aan het "aa" begin van de doelreeks en legt groep 2 vast met de subsequence "aa" aan het einde van de doelreeks.

  • (=aa)(a)|(a) komt overeen met de doelreeks "a" en koppelt capturegroep 1 aan een lege reeks (omdat de positieve assert is mislukt) en legt groep 2 vast met de subsequence "a". Het komt ook overeen met de doelreeks "aa" en koppelt capture groep 1 aan de subsequence "aa" en capture groep 2 met een lege reeks.

Unicode-escapereeks

Een Unicode-escapereeks is een backslash gevolgd door de letter 'u' gevolgd door vier hexadecimale cijfers (0-9a-fA-F). Het komt overeen met een teken in de doelreeks met de waarde die is opgegeven door de vier cijfers. Komt bijvoorbeeld \u0041 overeen met de doelreeks "a" wanneer ASCII-tekencodering wordt gebruikt.

Jokerteken

Een jokerteken komt overeen met een willekeurig teken in de doelexpressie, met uitzondering van een nieuwe regel.

Woordgrens

In de volgende situaties treedt een woordgrens op:

  • Het huidige teken staat aan het begin van de doelreeks en is een van de woordtekens A-Za-z0-9_

  • De huidige tekenpositie ligt voorbij het einde van de doelreeks en het laatste teken in de doelreeks is een van de woordtekens.

  • Het huidige teken is een van de woordtekens en het voorgaande teken is niet.

  • Het huidige teken is geen van de woordtekens en het voorgaande teken is.

Woordgrens assertie

Een woordgrens assertie komt overeen wanneer de huidige positie in de doeltekenreeks direct na een woordgrens valt.

Zoeken en zoeken

Als een reguliere expressie overeenkomt met een doelreeks, moet de volledige reguliere expressie overeenkomen met de volledige doelreeks. De reguliere expressie bcd komt bijvoorbeeld overeen met de doelreeks "bcd" , maar komt niet overeen met de doelreeks "abcd" of de doelreeks "bcde".

Als u een reguliere expressie wilt zoeken, moet er ergens in de doelvolgorde een subsequence zijn die overeenkomt met de reguliere expressie. De zoekopdracht vindt doorgaans de meest links overeenkomende subsequence.

Examples:

  • Een zoekopdracht naar de reguliere expressie bcd in de doelreeks "bcd" slaagt en komt overeen met de hele reeks. Dezelfde zoekopdracht in de doelreeks "abcd" slaagt ook en komt overeen met de laatste drie tekens. Dezelfde zoekopdracht in de doelreeks "bcde" slaagt ook en komt overeen met de eerste drie tekens.

  • Een zoekopdracht naar de reguliere expressie bcd in de doelreeks "bcdbcd" slaagt en komt overeen met de eerste drie tekens.

Als er meer dan één subsequence is die op een bepaalde locatie in de doelreeks overeenkomt, zijn er twee manieren om het overeenkomende patroon te kiezen.

De eerste overeenkomst kiest de subsequence die voor het eerst is gevonden toen de reguliere expressie overeenkomt.

Langste overeenkomst kiest de langste subsequence van de overeenkomsten op die locatie. Als er meer dan één subsequence is die de maximale lengte heeft, kiest de langste overeenkomst degene die als eerste is gevonden.

Wanneer bijvoorbeeld de eerste overeenkomst wordt gebruikt, komt een zoekopdracht naar de reguliere expressie b|bc in de doelvolgorde "abcd" overeen met de subsequence "b" , omdat de linkerterm van de alternatie overeenkomt met die subsequentie. De eerste overeenkomst probeert daarom niet de rechterterm van de alternatie. Wanneer de langste overeenkomst wordt gebruikt, komt dezelfde zoekopdracht overeen "bc" omdat "bc" deze langer is dan "b".

Een gedeeltelijke overeenkomst slaagt als de overeenkomst het einde van de doelreeks bereikt zonder fouten, zelfs als deze het einde van de reguliere expressie niet heeft bereikt. Als een gedeeltelijke overeenkomst is geslaagd, kan het toevoegen van tekens aan de doelvolgorde ertoe leiden dat een latere gedeeltelijke overeenkomst mislukt. Als een gedeeltelijke overeenkomst mislukt, kan het toevoegen van tekens aan de doelvolgorde echter niet leiden tot een latere gedeeltelijke overeenkomst. Bijvoorbeeld, met een gedeeltelijke overeenkomst, komt overeen met de doelreeks"a", ab maar niet "ac".

Markeringen opmaken

ECMAScript Regels opmaken regels voor sed-indeling Vervangende tekst
$& & De tekenreeks die overeenkomt met de volledige reguliere expressie: [match[0].first, match[0].second)
$$ $
\& &
$`" (dollarteken gevolgd door achteraanhalingsteken) De tekenreeks die voorafgaat aan de subsequence die overeenkomt met de reguliere expressie: [match.prefix().first, match.prefix().second)
$'" (dollarteken gevolgd door aanhalingsteken) De tekenreeks die volgt op de subsequence die overeenkomt met de reguliere expressie: [match.suffix().first, match.suffix().second)
$n \n De tekenreeks die overeenkomt met de opnamegroep op positie n, waarbij n een getal tussen 0 en 9 is: [match[n].first, match[n].second)
\\n \n
$nn De tekenreeks die overeenkomt met de opnamegroep op positie nn, waarbij nn een getal tussen 10 en 99 is: [match[nn].first, match[nn].second)

Zie ook

Overzicht van de standaardbibliotheek van C++