Escapes voor tekens in reguliere expressies

De backslash (\) in een reguliere expressie geeft een van de volgende aan:

  • Het teken dat volgt, is een speciaal teken, zoals wordt weergegeven in de tabel in de volgende sectie. Is bijvoorbeeld \b een anker dat aangeeft dat een reguliere expressieovereenkomst moet beginnen op een woordgrens, \t een tabblad vertegenwoordigt en \x020 een spatie vertegenwoordigt.

  • Een teken dat anders zou worden geïnterpreteerd als een niet-gescaped taalconstructie, moet letterlijk worden geïnterpreteerd. Een accolade ({) begint bijvoorbeeld met de definitie van een kwantificator, maar een backslash gevolgd door een accolade (\{) geeft aan dat de engine voor reguliere expressie moet overeenkomen met de accolade. Op dezelfde manier markeert één backslash het begin van een escaped-taalconstructie, maar twee backslashes (\\) geven aan dat de engine voor reguliere expressies moet overeenkomen met de backslash.

Notitie

Escapes voor tekens worden herkend in reguliere expressiepatronen, maar niet in vervangingspatronen.

Escapes voor tekens in .NET

De volgende tabel bevat de teken escapes die worden ondersteund door reguliere expressies in .NET.

Teken of reeks Beschrijving
Alle tekens, met uitzondering van het volgende:

. $ ^ { [ ( | ) * + ? \
Andere tekens dan de tekens in de kolom Teken of reeks hebben geen speciale betekenis in reguliere expressies; ze komen overeen met zichzelf.

De tekens die zijn opgenomen in de kolom Teken of reeks zijn speciale reguliere expressietaalelementen. Als u ze in een reguliere expressie wilt vergelijken, moeten ze worden ontsnapt of opgenomen in een groep met positieve tekens. De reguliere expressie \$\d+ of [$]\d+ komt bijvoorbeeld overeen met $1200.
\a Komt overeen met een belteken (alarm). \u0007
\b In een [character_group] tekenklasse komt deze overeen met een backspace, \u0008. (Zie Tekenklassen.) Buiten een tekenklasse \b is een anker dat overeenkomt met een woordgrens. (Zie Ankers.)
\t Komt overeen met een tabblad. \u0009
\r Komt overeen met een regelterugloop, \u000D. Houd er rekening mee dat dit \r niet gelijk is aan het nieuwe regelteken, \n.
\v Komt overeen met een verticaal tabblad. \u000B
\f Komt overeen met een formulierfeed, \u000C.
\n Komt overeen met een nieuwe regel, \u000A.
\e Komt overeen met een ontsnapping, \u001B.
\Nnn Komt overeen met een ASCII-teken, waarbij nnn bestaat uit twee of drie cijfers die de octale tekencode vertegenwoordigen. Vertegenwoordigt bijvoorbeeld \040 een spatieteken. Deze constructie wordt geïnterpreteerd als een backreference als deze slechts één cijfer (bijvoorbeeld \2) heeft of als deze overeenkomt met het aantal vastleggende groepen. (Zie Backreference Constructs.)
\xNn Komt overeen met een ASCII-teken, waarbij nn een hexadecimale hexadecimale tekencode is.
\cX Komt overeen met een ASCII-besturingselement, waarbij X de letter van het besturingselementteken is. Is bijvoorbeeld \cC Ctrl-C.
\uNnnn Komt overeen met een UTF-16-code-eenheid waarvan de waarde nnnn hexadecimaal is. Opmerking: de Escape-teken van Perl 5 die wordt gebruikt om Unicode op te geven, wordt niet ondersteund door .NET. De escape van Het Perl 5 karakter heeft de vorm \x{####…}, waar #### een reeks hexadecimale cijfers is. Gebruik \uin plaats daarvan nnnn.
\ Wanneer een teken wordt gevolgd dat niet wordt herkend als een escape-teken, komt dit teken overeen. Komt bijvoorbeeld \* overeen met een sterretje (*) en is hetzelfde als \x2A.

Een voorbeeld

In het volgende voorbeeld ziet u het gebruik van escape-tekens in een reguliere expressie. Het parseert een tekenreeks die de namen bevat van de grootste steden ter wereld en hun bevolking in 2009. Elke plaatsnaam wordt gescheiden van de populatie door een tabblad (\t) of een verticale balk (| of \u007c). Afzonderlijke steden en hun populaties worden van elkaar gescheiden door een regelterugloop en lijnfeed.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string delimited = @"\G(.+)[\t\u007c](.+)\r?\n";
      string input = "Mumbai, India|13,922,125\t\n" +
                            "Shanghai, China\t13,831,900\n" +
                            "Karachi, Pakistan|12,991,000\n" +
                            "Delhi, India\t12,259,230\n" +
                            "Istanbul, Türkiye|11,372,613\n";
      Console.WriteLine("Population of the World's Largest Cities, 2009");
      Console.WriteLine();
      Console.WriteLine("{0,-20} {1,10}", "City", "Population");
      Console.WriteLine();
      foreach (Match match in Regex.Matches(input, delimited))
         Console.WriteLine("{0,-20} {1,10}", match.Groups[1].Value,
                                            match.Groups[2].Value);
   }
}
// The example displays the following output:
//       Population of the World's Largest Cities, 2009
//
//       City                 Population
//
//       Mumbai, India        13,922,125
//       Shanghai, China      13,831,900
//       Karachi, Pakistan    12,991,000
//       Delhi, India         12,259,230
//       Istanbul, Türkiye     11,372,613
Imports System.Text.RegularExpressions

Module Example
    Public Sub Main()
        Dim delimited As String = "\G(.+)[\t\u007c](.+)\r?\n"
        Dim input As String = "Mumbai, India|13,922,125" + vbCrLf + _
                              "Shanghai, China" + vbTab + "13,831,900" + vbCrLf + _
                              "Karachi, Pakistan|12,991,000" + vbCrLf + _
                              "Delhi, India" + vbTab + "12,259,230" + vbCrLf + _
                              "Istanbul, Türkiye|11,372,613" + vbCrLf
        Console.WriteLine("Population of the World's Largest Cities, 2009")
        Console.WriteLine()
        Console.WriteLine("{0,-20} {1,10}", "City", "Population")
        Console.WriteLine()
        For Each match As Match In Regex.Matches(input, delimited)
            Console.WriteLine("{0,-20} {1,10}", match.Groups(1).Value, _
                                               match.Groups(2).Value)
        Next
    End Sub
End Module
' The example displays the following output:
'       Population of the World's Largest Cities, 2009
'       
'       City                 Population
'       
'       Mumbai, India        13,922,125
'       Shanghai, China      13,831,900
'       Karachi, Pakistan    12,991,000
'       Delhi, India         12,259,230
'       Istanbul, Türkiye     11,372,613

De reguliere expressie \G(.+)[\t\u007c](.+)\r?\n wordt geïnterpreteerd zoals weergegeven in de volgende tabel.

Patroon Beschrijving
\G Begin de wedstrijd waar de laatste wedstrijd is geëindigd.
(.+) Een of meer keren overeenkomen met een willekeurig teken. Dit is de eerste opnamegroep.
[\t\u007c] Komt overeen met een tabblad (\t) of een verticale balk (|).
(.+) Een of meer keren overeenkomen met een willekeurig teken. Dit is de tweede vastleggende groep.
\r?\n Kom overeen met nul of één exemplaar van een regelterugloop, gevolgd door een nieuwe regel.

Zie ook