Språk för reguljärt uttryck – snabbreferens

Ett reguljärt uttryck är ett mönster som motorn för reguljära uttryck försöker matcha i indatatext. Ett mönster består av en eller flera teckenliteraler, operatorer eller konstruktioner. En kort introduktion finns i Reguljära .NET-uttryck.

Varje avsnitt i den här snabbreferensen visar en viss kategori med tecken, operatorer och konstruktioner som du kan använda för att definiera reguljära uttryck.

Vi har också angett den här informationen i två format som du kan ladda ned och skriva ut för enkel referens:

Tecken rymningar

Omvänt snedstreck (\) i ett reguljärt uttryck anger att tecknet som följer det antingen är ett specialtecken (som visas i följande tabell) eller ska tolkas bokstavligen. Mer information finns i Teckenflykter.

Undantaget tecken beskrivning Mönster Träffar
\a Matchar ett klocktecken, \u0007. \a "\u0007" in "Error!" + '\u0007'
\b I en teckenklass matchar en backspace, \u0008. [\b]{3,} "\b\b\b\b" in "\b\b\b\b"
\t Matchar en flik, \u0009. (\w+)\t "item1\t", "item2\t" i "item1\titem2\t"
\r Matchar en vagnretur, \u000D. (\r motsvarar inte det nya radtecknet. \n) \r\n(\w+) "\r\nThese" in "\r\nThese are\ntwo lines."
\v Matchar en lodrät flik, \u000B. [\v]{2,} "\v\v\v" in "\v\v\v"
\f Matchar ett formulärflöde, \u000C. [\f]{2,} "\f\f\f" in "\f\f\f"
\n Matchar en ny rad, \u000A. \r\n(\w+) "\r\nThese" in "\r\nThese are\ntwo lines."
\e Matchar en escape, \u001B. \e "\x001B" in "\x001B"
\Nnn Använder octal representation för att ange ett tecken (nnn består av två eller tre siffror). \w\040\w "a b", "c d" i "a bc d"
\xNn Använder hexadecimal representation för att ange ett tecken (nn består av exakt två siffror). \w\x20\w "a b", "c d" i "a bc d"
\cX

\cX
Matchar DET ASCII-kontrolltecken som anges av X eller x, där X eller x är bokstaven i kontrolltecknet. \cC "\x0003" i "\x0003" (Ctrl-C)
\uNnnn Matchar ett Unicode-tecken med hjälp av hexadecimal representation (exakt fyra siffror, som representeras av nnnn). \w\u0020\w "a b", "c d" i "a bc d"
\ När det följs av ett tecken som inte känns igen som ett undantaget tecken i det här och andra tabeller i det här avsnittet matchar det tecknet. Är till exempel \* samma som \x2A, och \. är samma som \x2E. Detta gör att motorn för reguljära uttryck kan skilja språkelement (till exempel * eller ?) och teckenliteraler (representeras av \* eller \?). \d+[\+-x\*]\d+ "2+2" och "3*9" i "(2+2) * 3*9"

Teckenklasser

En teckenklass matchar något av en uppsättning tecken. Teckenklasser innehåller språkelementen som anges i följande tabell. Mer information finns i Teckenklasser.

Teckenklass beskrivning Mönster Träffar
[character_group] Matchar ett enskilt tecken i character_group. Som standard är matchningen skiftlägeskänslig. [ae] "a" in "gray"

"a", "e" i "lane"
[^character_group] Negation: Matchar alla enskilda tecken som inte finns i character_group. Som standard är tecken i character_group skiftlägeskänsliga. [^aei] "r", "g", "n" i "reign"
[första-sista] Teckenintervall: Matchar alla enskilda tecken i intervallet från första till sista. [A-Z] "A", "B" i "AB123"
. Jokertecken: Matchar alla enskilda tecken utom \n.

Om du vill matcha ett literaltecken (. eller \u002E), måste du föregå det med escape-tecknet (\.).
a.e "ave" in "nave"

"ate" in "water"
\p{Namn} Matchar ett enskilt tecken i den allmänna Kategorin Unicode eller namngivet block som anges med namn. \p{Lu}

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

"Д", "Ж" i "ДЖem"
\P{Namn} Matchar ett enskilt tecken som inte finns i den allmänna Kategorin Unicode eller med namnet block som anges med namn. \P{Lu}

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

"e", "m" i "ДЖem"
\w Matchar valfritt ordtecken. \w "I", "D", "A", , "1"i "3""ID A1.3"
\W Matchar alla tecken som inte är ord. \W " ", "." i "ID A1.3"
\s Matchar alla blankstegstecken. \w\s "D " in "ID A1.3"
\S Matchar alla tecken som inte är blanksteg. \s\S " _" in "int __ctr"
\d Matchar valfri decimalsiffra. \d "4" in "4 = IV"
\D Matchar alla andra tecken än en decimalsiffra. \D " ", "=", " ", , "I"i "V""4 = IV"

Fästpunkter

Fästpunkter, eller atomiska nollbreddskontroller, gör att en matchning lyckas eller misslyckas beroende på den aktuella positionen i strängen, men de gör inte att motorn avancerar genom strängen eller använder tecken. De metakarakterare som anges i följande tabell är fästpunkter. Mer information finns i Fästpunkter.

Påstående beskrivning Mönster Träffar
^ Som standard måste matchningen starta i början av strängen. i flerradsläge måste den starta i början av raden. ^\d{3} "901" in "901-333-"
$ Som standard måste matchningen ske i slutet av strängen eller före \n i slutet av strängen. I flerradsläge måste den ske före slutet av raden eller före \n i slutet av raden. -\d{3}$ "-333" in "-901-333"
\A Matchningen måste ske i början av strängen. \A\d{3} "901" in "901-333-"
\Z Matchningen måste ske i slutet av strängen eller före \n i slutet av strängen. -\d{3}\Z "-333" in "-901-333"
\z Matchningen måste ske i slutet av strängen. -\d{3}\z "-333" in "-901-333"
\G Matchningen måste ske vid den punkt där den föregående matchen slutade, eller om det inte fanns någon tidigare matchning, vid positionen i strängen där matchningen startade. \G\(\d\) "(1)", "(3)", "(5)" i "(1)(3)(5)[7](9)"
\b Matchningen måste ske på en gräns mellan ett \w (alfanumeriskt) och ett \W (icke-alfanumeriskt) tecken. \b\w+\s\w+\b "them theme", "them them" i "them theme them them"
\B Matchningen får inte ske på en \b gräns. \Bend\w*\b "ends", "ender" i "end sends endure lender"

Grupperingskonstruktioner

Grupperingskonstruktioner avgränsar underuttryck för ett reguljärt uttryck och samlar vanligtvis in delsträngar av en indatasträng. Grupperingskonstruktioner innehåller de språkelement som anges i följande tabell. Mer information finns i Grupperingskonstruktioner.

Grupperingskonstruktion beskrivning Mönster Träffar
(subexpression) Avbildar den matchade underuttrycket och tilldelar det ett enbaserat ordningstal. (\w)\1 "ee" in "deep"
(?<name>subexpression)
eller
(?'name'subexpression)
Samlar in den matchade underuttrycket i en namngiven grupp. (?<double>\w)\k<double> "ee" in "deep"
(?<name1-name2>subexpression)
eller
(?'name1-name2'subexpression)
Definierar en definition för balanserande grupper. Mer information finns i avsnittet "Balansera gruppdefinition" i Grupperingskonstruktioner. (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ "((1-3)*(3-1))" in "3+2^((1-3)*(3-1))"
(?:subexpression) Definierar en icke-kapslingsgrupp. Write(?:Line)? "WriteLine" in "Console.WriteLine()"

"Write" in "Console.Write(value)"
(?imnsx-imnsx:subexpression) Tillämpar eller inaktiverar de angivna alternativen i underuttryck. Mer information finns i Alternativ för reguljära uttryck. A\d{2}(?i:\w+)\b "A12xl", "A12XL" i "A12xl A12XL a12xl"
(?=subexpression) Positiv lookahead-försäkran med noll bredd. \b\w+\b(?=.+and.+) "cats", "dogs"
in
"cats, dogs and some mice."
(?!subexpression) Negativ lookahead-försäkran med noll bredd. \b\w+\b(?!.+and.+) "and", , "some""mice"
in
"cats, dogs and some mice."
(?<=subexpression) Noll bredd positiv lookbehind försäkran. \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."
(?<!subexpression) Nollbredd negativ lookbehind försäkran. \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."
(?>subexpression) Atomisk grupp. '(?>a|ab)c "ac" I"ac"

ingenting i"abc"

En snabb titt på lösningar

När motorn för reguljära uttryck träffar ett lookaround-uttryck tar den en delsträng som sträcker sig från den aktuella positionen till början (lookbehind) eller slutet (lookahead) för den ursprungliga strängen och körs Regex.IsMatch sedan på den understrängen med hjälp av lookaround-mönstret. Framgången för den här underuttryckens resultat bestäms sedan av om det är en positiv eller negativ försäkran.

Lookaround Name Funktion
(?=check) Positiv lookahead Hävdar att det som omedelbart följer den aktuella positionen i strängen är "check"
(?<=check) Positiv lookbehind Hävdar att det som omedelbart föregår den aktuella positionen i strängen är "check"
(?!check) Negativ lookahead Hävdar att det som omedelbart följer den aktuella positionen i strängen inte är "check"
(?<!check) Negativ lookbehind Hävdar att det som omedelbart föregår den aktuella positionen i strängen inte är "check"

När de har matchats utvärderas inte atomgrupper igen, även om resten av mönstret misslyckas på grund av matchningen. Detta kan avsevärt förbättra prestanda när kvantifierare inträffar inom atomgruppen eller resten av mönstret.

Kvantifierare

En kvantifierare anger hur många instanser av föregående element (som kan vara ett tecken, en grupp eller en teckenklass) måste finnas i indatasträngen för att en matchning ska inträffa. Kvantifierare innehåller språkelementen som anges i följande tabell. Mer information finns i Kvantifierare.

Kvantifierare beskrivning Mönster Träffar
* Matchar föregående element noll eller fler gånger. a.*c "abcbc" in "abcbc"
+ Matchar föregående element en eller flera gånger. "be+" "bee"i , "be" i "been""bent"
? Matchar föregående element noll eller en gång. "rai?" "rai" in "rain"
{N} Matchar föregående element exakt n gånger. ",\d{3}" ",043" i "1,043.6", ",876", ",543"och ",210" i "9,876,543,210"
{N,} Matchar föregående element minst n gånger. "\d{2,}" "166", , "29""1930"
{n m,} Matchar föregående element minst n gånger, men inte fler än m gånger. "\d{3,5}" "166", "17668"

"19302" in "193024"
*? Matchar föregående element noll eller fler gånger, men så få gånger som möjligt. a.*?c "abc" in "abcbc"
+? Matchar föregående element en eller flera gånger, men så få gånger som möjligt. "be+?" "be"i , "be" i "been""bent"
?? Matchar föregående element noll eller en gång, men så få gånger som möjligt. "rai??" "ra" in "rain"
{N}? Matchar föregående element exakt n gånger. ",\d{3}?" ",043" i "1,043.6", ",876", ",543"och ",210" i "9,876,543,210"
{N,}? Matchar föregående element minst n gånger, men så få gånger som möjligt. "\d{2,}?" "166", , "29""1930"
{n m,}? Matchar det tidigare elementet mellan n och m gånger, men så få gånger som möjligt. "\d{3,5}?" "166", "17668"

"193", "024" i "193024"

Backreference-konstruktioner

En backreference gör att en tidigare matchad underuttryck kan identifieras senare i samma reguljära uttryck. I följande tabell visas de backreference-konstruktioner som stöds av reguljära uttryck i .NET. Mer information finns i Backreference-konstruktioner.

Backreference-konstruktion beskrivning Mönster Träffar
\Nummer Backreference. Matchar värdet för ett numrerat underuttryck. (\w)\1 "ee" in "seek"
\k<Namn> Namngiven backreference. Matchar värdet för ett namngivet uttryck. (?<char>\w)\k<char> "ee" in "seek"

Alternationskonstruktioner

Alternationskonstruktioner ändrar ett reguljärt uttryck för att aktivera antingen/eller matchning. Dessa konstruktioner innehåller språkelementen som anges i följande tabell. Mer information finns i Alternationskonstruktioner.

Alternationskonstruktion beskrivning Mönster Träffar
| Matchar ett element som avgränsas med det lodräta strecktecknet (|). th(e|is|at) "the", "this" i "this is the day."
(?(uttryck)ja|nej)
eller
(?(uttryck)ja)
Matchar ja om det reguljära uttrycksmönstret som anges av uttrycket matchar, annars matchar det valfria ingen del. uttryck tolkas som en försäkran med noll bredd.

Om du vill undvika tvetydigheter med en namngiven eller numrerad insamlingsgrupp kan du också använda en explicit försäkran, så här:
(?( (?=uttryck) )ja|nej)
(?(A)A\d{2}\b|\b\d{3}\b) "A10", "910" i "A10 C103 910"
(?(namn)ja|nej)
eller
(?(namn)ja)
Matchar ja om namn, en namngiven eller numrerad insamlingsgrupp, har en matchning, annars matchar det valfria nejet. (?<quoted>")?(?(quoted).+?"|\S+\s) "Dogs.jpg ", "\"Yiska playing.jpg\"" i "Dogs.jpg \"Yiska playing.jpg\""

Substitutioner

Ersättningar är språkelement för reguljära uttryck som stöds i ersättningsmönster. Mer information finns i Substitutioner. De metadiagram som anges i följande tabell är atomiska nollbreddskontroller.

Tecken beskrivning Mönster Ersättningsmönster Indatasträng Resultatsträng
$Nummer Ersätter delsträngen som matchas med gruppnummer. \b(\w+)(\s)(\w+)\b $3$2$1 "one two" "two one"
${Namn} Ersätter delsträngen som matchas med det namngivna gruppnamnet. \b(?<word1>\w+)(\s)(?<word2>\w+)\b ${word2} ${word1} "one two" "two one"
$$ Ersätter en literal "$". \b(\d+)\s?USD $$$1 "103 USD" "$103"
$& Ersätter en kopia av hela matchningen. \$?\d*\.?\d+ **$&** "$1.30" "**$1.30**"
$` Ersätter all text i indatasträngen före matchningen. B+ $` "AABBCC" "AAAACC"
$' Ersätter all text i indatasträngen efter matchningen. B+ $' "AABBCC" "AACCCC"
$+ Ersätter den sista gruppen som hämtades. B+(C+) $+ "AABBCCDD" "AACCDD"
$_ Ersätter hela indatasträngen. B+ $_ "AABBCC" "AAAABBCCCC"

Alternativ för reguljära uttryck

Du kan ange alternativ som styr hur motorn för reguljära uttryck tolkar ett reguljärt uttrycksmönster. Många av dessa alternativ kan anges antingen infogade (i mönster för reguljära uttryck) eller som en eller flera RegexOptions konstanter. Den här snabbreferensen visar endast infogade alternativ. Mer information om infogade alternativ finns RegexOptions i artikeln Alternativ för reguljära uttryck.

Du kan ange ett infogat alternativ på två sätt:

  • Genom att använda den diverse konstruktionen(?imnsx-imnsx), där ett minustecken (-) innan ett alternativ eller en uppsättning alternativ inaktiverar dessa alternativ. Aktiverar till exempel (?i-mn) skiftlägesokänslig matchning (i) , inaktiverar flerlinjeläge (m) och inaktiverar icke namngivna gruppfångst (n). Alternativet gäller för mönster för reguljära uttryck från den punkt där alternativet definieras och är effektivt antingen till slutet av mönstret eller till den punkt där en annan konstruktion vänder alternativet.
  • Genom att använda underuttryck för grupperingskonstruktionen(?imnsx-imnsx:, som endast definierar alternativ för den angivna gruppen.)

Motorn för reguljära .NET-uttryck stöder följande infogade alternativ:

Alternativ Description Mönster Träffar
i Använd skiftlägesokänslig matchning. \b(?i)a(?-i)a\w+\b "aardvark", "aaaAuto" i "aardvark AAAuto aaaAuto Adam breakfast"
m Använd flerradsläge. ^ och $ matcha början och slutet av en rad, i stället för början och slutet av en sträng. Ett exempel finns i avsnittet "Flerradsläge" i Alternativ för reguljära uttryck.
n Samla inte in icke namngivna grupper. Ett exempel finns i avsnittet "Endast explicita avbildningar" i Alternativ för reguljära uttryck.
s Använd enkelradsläge. Ett exempel finns i avsnittet "Enkelradsläge" i Alternativ för reguljära uttryck.
x Ignorera ej inkapslade blanksteg i det reguljära uttrycksmönstret. \b(?x) \d+ \s \w+ "1 aardvark", "2 cats" i "1 aardvark 2 cats IV centurions"

Diverse konstruktioner

Diverse konstruktioner ändrar antingen ett mönster för reguljära uttryck eller ger information om det. I följande tabell visas de olika konstruktioner som stöds av .NET. Mer information finns i Diverse konstruktioner.

Konstruera Definition Exempel
(?imnsx-imnsx) Anger eller inaktiverar alternativ, till exempel skiftlägeskänslighet mitt i ett mönster. Mer information finns i Alternativ för reguljära uttryck. \bA(?i)b\w+\b matchar "ABA", "Able" i "ABA Able Act"
(?#Kommentar) Infogad kommentar. Kommentaren slutar vid den första avslutande parentesen. \bA(?#Matches words starting with A)\w+\b
# [till slutet av raden] X-lägeskommentar. Kommentaren börjar vid en ej kapslade # och fortsätter till slutet av raden. (?x)\bA\w+\b#Matches words starting with A

Se även