Reguliere expressietaal - Snelzoekgids

Een reguliere expressie is een patroon dat de engine voor reguliere expressies probeert overeen te komen in invoertekst. Een patroon bestaat uit een of meer letterlijke tekens, operatoren of constructies van tekens. Zie .NET Regular Expressions voor een korte inleiding.

Elke sectie in deze snelzoekgids bevat een bepaalde categorie tekens, operators en constructies die u kunt gebruiken om reguliere expressies te definiëren.

We hebben deze informatie ook in twee indelingen opgegeven die u kunt downloaden en afdrukken voor eenvoudige naslaginformatie:

Escapes voor tekens

Het backslashteken (\) in een reguliere expressie geeft aan dat het teken dat erop volgt een speciaal teken is (zoals wordt weergegeven in de volgende tabel) of letterlijk moet worden geïnterpreteerd. Zie Escapes voor tekens voor meer informatie.

Escape-teken Beschrijving Patroon Matches
\a Komt overeen met een belteken, \u0007. \a "\u0007" in "Error!" + '\u0007'
\b In een tekenklasse komt deze overeen met een backspace, \u0008. [\b]{3,} "\b\b\b\b" in "\b\b\b\b"
\t Komt overeen met een tabblad, \u0009. (\w+)\t "item1\t", "item2\t" in "item1\titem2\t"
\r Komt overeen met een regelterugloop, \u000D. (\r is niet gelijk aan het teken newline, \n.) \r\n(\w+) "\r\nThese" in "\r\nThese are\ntwo lines."
\v Komt overeen met een verticaal tabblad, \u000B. [\v]{2,} "\v\v\v" in "\v\v\v"
\f Komt overeen met een formulierfeed, \u000C. [\f]{2,} "\f\f\f" in "\f\f\f"
\n Komt overeen met een nieuwe regel, \u000A. \r\n(\w+) "\r\nThese" in "\r\nThese are\ntwo lines."
\e Komt overeen met een escape, \u001B. \e "\x001B" in "\x001B"
\Nnn Maakt gebruik van octale weergave om een teken op te geven (nnn bestaat uit twee of drie cijfers). \w\040\w "a b", "c d" in "a bc d"
\xNn Gebruikt hexadecimale weergave om een teken op te geven (nn bestaat uit exact twee cijfers). \w\x20\w "a b", "c d" in "a bc d"
\cX

\cx
Komt overeen met het ASCII-besturingselement dat is opgegeven door X of x, waarbij X of x de letter van het besturingselementteken is. \cC "\x0003" in "\x0003" (Ctrl-C)
\uNnnn Komt overeen met een Unicode-teken met behulp van hexadecimale weergave (precies vier cijfers, zoals vertegenwoordigd door nnnn). \w\u0020\w "a b", "c d" in "a bc d"
\ Wanneer een teken wordt gevolgd dat niet wordt herkend als een escape-teken in dit onderwerp en andere tabellen in dit onderwerp, komt dit teken overeen. Is bijvoorbeeld \* hetzelfde als \x2A, en \. is hetzelfde als \x2E. Hierdoor kan de engine voor reguliere expressies taalelementen (zoals * of ?) en letterlijke tekens (vertegenwoordigd door \* of \?) niet eenduidig maken. \d+[\+-x\*]\d+ "2+2" en "3*9" in "(2+2) * 3*9"

Tekenklassen

Een tekenklasse komt overeen met een van een set tekens. Tekenklassen bevatten de taalelementen die worden vermeld in de volgende tabel. Zie Tekenklassen voor meer informatie.

Tekenklasse Beschrijving Patroon Matches
[character_group] Komt overeen met een willekeurig teken in character_group. De overeenkomst is standaard hoofdlettergevoelig. [ae] "a" in "gray"

"a", "e" in "lane"
[^character_group] Negatie: komt overeen met een willekeurig teken dat zich niet in character_group bevindt. Standaard zijn tekens in character_group hoofdlettergevoelig. [^aei] "r""n", "g"in"reign"
[eerste-laatste] Tekenbereik: komt overeen met elk willekeurig teken in het bereik van eerste tot laatste. [A-Z] "A", "B" in "AB123"
. Jokerteken: komt overeen met een willekeurig teken, behalve \n.

Als u een letterlijk punt (of \u002E) wilt vergelijken, moet u deze voorafgaan door het escapeteken (\.).
a.e "ave" in "nave"

"ate" in "water"
\p{name} Komt overeen met een willekeurig teken in de algemene Unicode-categorie of benoemd blok dat is opgegeven met de naam. \p{Lu}

\p{IsCyrillic}
"C", "L" in "City Lights"

"Д", "Ж" in "ДЖem"
\P{name} Komt overeen met een willekeurig teken dat zich niet in de algemene Unicode-categorie of benoemd blok bevindt dat is opgegeven op naam. \P{Lu}

\P{IsCyrillic}
"i""y", "t"in"City"

"e", "m" in "ДЖem"
\w Komt overeen met elk woordteken. \w "I", , "D""A", "1", "3" in"ID A1.3"
\W Komt overeen met een niet-woordteken. \W " ", "." in "ID A1.3"
\s Komt overeen met een witruimteteken. \w\s "D " in "ID A1.3"
\S Komt overeen met een niet-witruimteteken. \s\S " _" in "int __ctr"
\d Komt overeen met een decimaal getal. \d "4" in "4 = IV"
\D Komt overeen met een ander teken dan een decimaal cijfer. \D " ", , "="" ", "I", "V" in"4 = IV"

Ankers

Ankers, of atomic zero-width asserties, zorgen ervoor dat een overeenkomst slaagt of mislukt, afhankelijk van de huidige positie in de tekenreeks, maar ze zorgen er niet voor dat de engine door de tekenreeks gaat of tekens verbruikt. De metatekens die in de volgende tabel worden vermeld, zijn ankers. Zie Ankers voor meer informatie.

Assertie Beschrijving Patroon Matches
^ Standaard moet de overeenkomst beginnen aan het begin van de tekenreeks; in de modus met meerdere regels moet deze beginnen aan het begin van de regel. ^\d{3} "901" in "901-333-"
$ Standaard moet de overeenkomst plaatsvinden aan het einde van de tekenreeks of vóór \n aan het einde van de tekenreeks. In de modus met meerdere regels moet de overeenkomst plaatsvinden vóór het einde van de regel of vóór \n aan het einde van de regel. -\d{3}$ "-333" in "-901-333"
\A De overeenkomst moet plaatsvinden aan het begin van de tekenreeks. \A\d{3} "901" in "901-333-"
\Z De overeenkomst moet plaatsvinden aan het einde van de tekenreeks of vóór \n aan het einde van de tekenreeks. -\d{3}\Z "-333" in "-901-333"
\z De overeenkomst moet plaatsvinden aan het einde van de tekenreeks. -\d{3}\z "-333" in "-901-333"
\G De overeenkomst moet plaatsvinden op het punt waarop de vorige overeenkomst is geëindigd, of als er geen vorige overeenkomst was, op de positie in de tekenreeks waar overeenkomend is begonnen. \G\(\d\) "(1)""(5)", "(3)"in"(1)(3)(5)[7](9)"
\b De overeenkomst moet plaatsvinden op een grens tussen een \w (alfanumeriek) en een \W (niet-alfanumeriek) teken. \b\w+\s\w+\b "them theme", "them them" in "them theme them them"
\B De overeenkomst mag niet plaatsvinden op een \b grens. \Bend\w*\b "ends", "ender" in "end sends endure lender"

Groeperingsconstructies

Met groepering worden subexpressies van een reguliere expressie afbakend en worden meestal subtekenreeksen van een invoertekenreeks vastgelegd. Groeperingsconstructies omvatten de taalelementen die worden vermeld in de volgende tabel. Zie Groeperingsconstructies voor meer informatie.

Groeperingsconstructie Beschrijving Patroon Matches
(subexpressie) Legt de overeenkomende subexpressie vast en wijst deze toe aan een op één gebaseerd rangnummer. (\w)\1 "ee" in "deep"
(?<subexpressie van naam>)
of
(?'subexpressie van naam')
Legt de overeenkomende subexpressie vast in een benoemde groep. (?<double>\w)\k<double> "ee" in "deep"
(?<naam1-naam2>subexpressie)
of
(?'naam1-naam2'subexpressie)
Definieert een definitie van een taakgroep. Zie de sectie Balancing Group Definition in Grouping Constructs voor meer informatie. (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ "((1-3)*(3-1))" in "3+2^((1-3)*(3-1))"
(?:subexpressie) Hiermee definieert u een niet-inkapserende groep. Write(?:Line)? "WriteLine" in "Console.WriteLine()"

"Write" in "Console.Write(value)"
(?imnsx-imnsx:subexpressie) Hiermee worden de opgegeven opties binnen subexpressie toegepast of uitgeschakeld. Zie Opties voor reguliere expressies voor meer informatie. A\d{2}(?i:\w+)\b "A12xl", "A12XL" in "A12xl A12XL a12xl"
(?=subexpressie) Positieve lookahead-assertie met nulbreedte. \b\w+\b(?=.+and.+) "cats", "dogs"
in
"cats, dogs and some mice."
(?!subexpressie) Negatieve lookahead-assertie met nulbreedte. \b\w+\b(?!.+and.+) "and", , "some""mice"
in
"cats, dogs and some mice."
(?<=subexpressie) Positieve lookbehind-assertie met nulbreedte. \b\w+\b(?<=.+and.+)

———————————

\b\w+\b(?<=.+and.*)
"some", "mice"
in
"cats, dogs and some mice."
————————————
"and", , "some""mice"
in
"cats, dogs and some mice."
(?<!subexpressie) Negatieve lookbehind-assertie met nulbreedte. \b\w+\b(?<!.+and.+)

———————————

\b\w+\b(?<!.+and.*)
"cats", , "dogs""and"
in
"cats, dogs and some mice."
————————————
"cats", "dogs"
in
"cats, dogs and some mice."
(?>subexpressie) Atomische groep. '(?>a|ab)c "ac" Inch"ac"

niets in"abc"

Kijk in één oogopslag

Wanneer de engine voor reguliere expressies een lookaround-expressie bereikt, neemt deze een subtekenreeks die van de huidige positie naar het begin (lookbehind) of het einde (lookahead) van de oorspronkelijke tekenreeks bereikt en wordt vervolgens Regex.IsMatch uitgevoerd op die subtekenreeks met behulp van het lookaround-patroon. Het succes van het resultaat van deze subexpressie wordt vervolgens bepaald door of het een positieve of negatieve bewering is.

Lookaround Naam Functie
(?=check) Positieve lookahead Geeft aan dat wat onmiddellijk volgt op de huidige positie in de tekenreeks 'check' is
(?<=check) Positieve lookbehind Geeft aan dat wat direct voorafgaat aan de huidige positie in de tekenreeks 'check' is
(?!check) Negatieve lookahead Geeft aan dat wat onmiddellijk volgt op de huidige positie in de tekenreeks niet 'controleren' is
(?<!check) Negatieve lookbehind Bevestigt dat wat direct voorafgaat aan de huidige positie in de tekenreeks niet 'check' is

Zodra ze overeenkomen, worden atomische groepen niet opnieuw geëvalueerd, zelfs niet wanneer de rest van het patroon mislukt vanwege de overeenkomst. Dit kan de prestaties aanzienlijk verbeteren wanneer kwantificatoren optreden binnen de atomische groep of de rest van het patroon.

Kwantoren

Een kwantificator geeft aan hoeveel exemplaren van het vorige element (dat een teken, een groep of een tekenklasse kan zijn) aanwezig moeten zijn in de invoertekenreeks om een overeenkomst te laten plaatsvinden. Kwantificatoren bevatten de taalelementen die worden vermeld in de volgende tabel. Zie Kwantificatoren voor meer informatie.

Kwantor Beschrijving Patroon Matches
* Komt overeen met het vorige element nul of meer keren. a.*c "abcbc" in "abcbc"
+ Komt een of meer keren overeen met het vorige element. "be+" "bee"in , "be" in "been""bent"
? Komt overeen met het vorige element nul of één keer. "rai?" "rai" in "rain"
{N} Komt exact n keer overeen met het vorige element. ",\d{3}" ",043" in "1,043.6", ",876", ",543"en ",210" in "9,876,543,210"
{N,} Komt ten minste n keer overeen met het vorige element. "\d{2,}" "166", , "29""1930"
{n,m} Komt ten minste n keer overeen met het vorige element, maar niet meer dan m keer. "\d{3,5}" "166", "17668"

"19302" in "193024"
*? Komt overeen met het vorige element nul of meer keren, maar zo weinig mogelijk. a.*?c "abc" in "abcbc"
+? Komt een of meer keren overeen met het vorige element, maar zo weinig mogelijk. "be+?" "be"in , "be" in "been""bent"
?? Komt overeen met het vorige element nul of één keer, maar zo weinig mogelijk. "rai??" "ra" in "rain"
{N}? Komt exact n keer overeen met het voorgaande element. ",\d{3}?" ",043" in "1,043.6", ",876", ",543"en ",210" in "9,876,543,210"
{N,}? Komt ten minste n keer overeen met het vorige element, maar zo weinig mogelijk. "\d{2,}?" "166", , "29""1930"
{n,m}? Komt overeen met het vorige element tussen n en m tijden, maar zo weinig mogelijk. "\d{3,5}?" "166", "17668"

"193", "024" in "193024"

Backreference Constructs

Met een backreference kan een eerder overeenkomende subexpressie vervolgens in dezelfde reguliere expressie worden geïdentificeerd. De volgende tabel bevat de backreference-constructies die worden ondersteund door reguliere expressies in .NET. Zie Backreference Constructs voor meer informatie.

Backreference-constructie Beschrijving Patroon Matches
\Nummer Terugdeductie. Komt overeen met de waarde van een genummerde subexpressie. (\w)\1 "ee" in "seek"
\k<name> Benoemde backreference. Komt overeen met de waarde van een benoemde expressie. (?<char>\w)\k<char> "ee" in "seek"

Alternation Constructs

Met alternation-constructies wordt een reguliere expressie gewijzigd om een of meer overeenkomende expressies in te schakelen. Deze constructies omvatten de taalelementen die worden vermeld in de volgende tabel. Zie Alternation Constructs voor meer informatie.

Alternation-constructie Beschrijving Patroon Matches
| Komt overeen met een willekeurig element, gescheiden door het verticale staafteken (|). th(e|is|at) "the", "this" in "this is the day."
(?(expressie)ja|nee)
of
(?(expressie)ja)
Komt overeen met ja als het reguliere expressiepatroon dat is aangewezen door expressies overeenkomt; anders komt dit overeen met het optionele geen deel. expressie wordt geïnterpreteerd als een assertie met nul breedte.

Als u dubbelzinnigheid met een benoemde of genummerde opnamegroep wilt voorkomen, kunt u desgewenst een expliciete verklaring gebruiken, zoals deze:
(?( (?=expressie) )ja|nee)
(?(A)A\d{2}\b|\b\d{3}\b) "A10", "910" in "A10 C103 910"
(?(naam)ja|nee)
of
(?(naam)ja)
Komt overeen met ja als de naam, een benoemde of genummerde opnamegroep, een overeenkomst heeft. Anders komt deze overeen met het optionele nee. (?<quoted>")?(?(quoted).+?"|\S+\s) "Dogs.jpg ", "\"Yiska playing.jpg\"" in "Dogs.jpg \"Yiska playing.jpg\""

Vervangingen

Vervangingen zijn reguliere expressietaalelementen die worden ondersteund in vervangingspatronen. Zie Vervangingen voor meer informatie. De metatekens die in de volgende tabel worden vermeld, zijn atomische asserties met nul breedte.

Teken Beschrijving Patroon Vervangingspatroon Invoertekenreeks Resultaattekenreeks
$Nummer Vervangt de subtekenreeks die overeenkomt met het groepsnummer. \b(\w+)(\s)(\w+)\b $3$2$1 "one two" "two one"
${name} Vervangt de subtekenreeks die overeenkomt met de naam van de benoemde groep. \b(?<word1>\w+)(\s)(?<word2>\w+)\b ${word2} ${word1} "one two" "two one"
$$ Vervangt een letterlijke waarde $. \b(\d+)\s?USD $$$1 "103 USD" "$103"
$& Vervangt een kopie van de hele overeenkomst. \$?\d*\.?\d+ **$&** "$1.30" "**$1.30**"
$` Vervangt alle tekst van de invoertekenreeks vóór de overeenkomst. B+ $` "AABBCC" "AAAACC"
$' Vervangt alle tekst van de invoertekenreeks na de overeenkomst. B+ $' "AABBCC" "AACCCC"
$+ Vervangt de laatste groep die is vastgelegd. B+(C+) $+ "AABBCCDD" "AACCDD"
$_ Vervangt de volledige invoertekenreeks. B+ $_ "AABBCC" "AAAABBCCCC"

Opties voor reguliere expressies

U kunt opties opgeven die bepalen hoe de engine voor reguliere expressies een normaal expressiepatroon interpreteert. Veel van deze opties kunnen inline (in het reguliere expressiepatroon) of als een of meer RegexOptions constanten worden opgegeven. Deze snelzoekgids bevat alleen inlineopties. Zie het artikel Reguliere expressieopties voor meer informatie over inline en RegexOptions opties.

U kunt op twee manieren een inlineoptie opgeven:

  • Met behulp van de diverse constructie(?imnsx-imnsx), waarbij een minteken (-) voor een optie of set opties deze opties uitschakelt. Hiermee schakelt u bijvoorbeeld (?i-mn) hoofdlettergevoelige overeenkomsten (i) in, schakelt u de multilinemodus (m) uit en schakelt u niet-benoemde groepsopnamen (n) uit. De optie is van toepassing op het normale expressiepatroon vanaf het punt waarop de optie is gedefinieerd en is van kracht tot het einde van het patroon of op het punt waar een andere constructie de optie omdraait.
  • Door de subexpressie van de groeperingsconstructie(?imnsx-imnsx:te gebruiken, waarmee alleen opties voor de opgegeven groep worden gedefinieerd.)

De .NET-engine voor reguliere expressies ondersteunt de volgende inline-opties:

Optie Omschrijving Patroon Matches
i Gebruik hoofdlettergevoelige overeenkomsten. \b(?i)a(?-i)a\w+\b "aardvark", "aaaAuto" in "aardvark AAAuto aaaAuto Adam breakfast"
m Gebruik de modus met meerdere regels. ^ en $ komt overeen met het begin en einde van een regel, in plaats van het begin en einde van een tekenreeks. Zie voor een voorbeeld de sectie Multiline-modus in Opties voor reguliere expressies.
n Leg geen niet-benoemde groepen vast. Zie de sectie 'Alleen expliciete opnamen' in opties voor reguliere expressies voor een voorbeeld.
s Gebruik de modus met één regel. Zie de sectie Modus met één regel in reguliere expressieopties voor een voorbeeld.
x Negeer niet-gescaped witruimte in het reguliere expressiepatroon. \b(?x) \d+ \s \w+ "1 aardvark", "2 cats" in "1 aardvark 2 cats IV centurions"

Diverse constructies

Diverse constructies wijzigen een patroon voor reguliere expressies of geven er informatie over. De volgende tabel bevat de diverse constructies die worden ondersteund door .NET. Zie Diverse constructies voor meer informatie.

Bouwen Definitie Opmerking
(?imnsx-imnsx) Hiermee stelt u opties in of uit, zoals niet hoofdlettergevoeligheid in het midden van een patroon. Zie Opties voor reguliere expressies voor meer informatie. \bA(?i)b\w+\b komt overeen "ABA", "Able" in "ABA Able Act"
(?#Commentaar) Inline opmerking. De opmerking eindigt bij het eerste haakje sluiten. \bA(?#Matches words starting with A)\w+\b
# [naar einde van regel] Opmerking in X-modus. De opmerking begint bij een ongezicht en # gaat verder met het einde van de regel. (?x)\bA\w+\b#Matches words starting with A

Zie ook