Escapezeichen in regulären Ausdrücken

Der umgekehrte Schrägstrich (\) in einem regulären Ausdruck kann für eine der folgenden Optionen stehen:

  • Das darauf folgende Zeichen ist ein Sonderzeichen, wie in der Tabelle im folgenden Abschnitt gezeigt. \b ist z. B. ein Anker, der angibt, dass die Übereinstimmung eines regulären Ausdrucks mit einer Wortgrenze beginnen sollte, \t stellt einen Tabulator dar und \x020 stellt ein Leerzeichen dar.

  • Ein Zeichen, das andernfalls als Sprachkonstrukt ohne Escapezeichen interpretiert werden würde, sollte als Zeichenliteral interpretiert werden. Durch eine geschweifte Klammer ({) wird z. B. der Beginn der Definition eines Quantifizierers angezeigt, aber ein von einer geschweiften Klammer (\{) gefolgter umgekehrter Schrägstrich gibt an, dass die Engine für reguläre Ausdrücke eine Entsprechung für die geschweifte Klammer finden sollte. Auf ähnliche Weise markiert ein einzelner umgekehrter Schrägstrich den Anfang eines Sprachkonstrukts mit Escapezeichen, aber zwei umgekehrte Schrägstriche (\\) geben an, dass die Engine für reguläre Ausdrücke eine Entsprechung für den umgekehrten Schrägstrich finden soll.

Hinweis

Escapezeichen werden in Mustern von regulären Ausdrücken, jedoch nicht in Ersetzungsmustern erkannt.

Escapezeichen in .NET

In der folgenden Tabelle sind die Escapezeichen aufgeführt, die von regulären Ausdrücken in .NET unterstützt werden.

Zeichen oder Sequenz Beschreibung
Alle Zeichen außer Folgenden:

. $ ^ { [ ( | ) * + ? \
Andere als die in der Spalte Zeichen oder Sequenz aufgelisteten Zeichen haben keine spezielle Bedeutung in regulären Ausdrücken. Sie stehen für sich selbst.

Die in der Spalte Zeichen oder Sequenz enthaltenen Zeichen sind spezielle Sprachelemente regulärer Ausdrücke. Um diese in einem regulären Ausdruck abzugleichen, müssen sie mit Escapezeichen versehen oder in eine positive Zeichengruppe einbezogen werden. Der reguläre Ausdruck \$\d+ oder [$]\d+ entspricht z. B. "$1200".
\a Entspricht dem Klingelzeichen (Warnsignal) \u0007.
\b Entspricht in einer [Zeichengruppe]-Zeichenklasse einem Rücktastenzeichen \u0008. (Siehe Zeichenklassen.) Außerhalb einer Zeichenklasse ist \b ein Anker, der einer Wortgrenze entspricht. (Siehe Anker.)
\t Entspricht dem Tabstoppzeichen \u0009.
\r Entspricht dem Wagenrücklaufzeichen \u000D. \r ist nicht mit dem Zeilenumbruchzeichen (\n) identisch.
\v Entspricht dem vertikalen Tabstoppzeichen \u000B.
\f Entspricht dem Seitenvorschubzeichen \u000C.
\n Entspricht einer neuen Zeile \u000A.
\e Entspricht dem Escapezeichen \u001B.
\nnn Entspricht einem ASCII-Zeichen, wobei nnn aus zwei oder drei Ziffern besteht, die den oktalen Zeichencode darstellen. Beispielsweise stellt \040 ein Leerzeichen dar. Dieses Konstrukt wird als Rückverweis interpretiert, wenn es nur eine Ziffer (z. B. \2) hat oder wenn es der Nummer einer Erfassungsgruppe entspricht. (Siehe Rückverweiskonstrukte.)
\xnn Entspricht einem ASCII-Zeichen, wobei nn ein zweistelliger Hexadezimalzeichencode ist.
\cX Entspricht einem ASCII-Steuerzeichen, wobei X der Buchstabe des Steuerzeichens ist. Beispielsweise ist \cC STRG+C.
\unnnn Entspricht einer UTF-16-Codeeinheit, deren Wert nnnn hexadezimal ist. Hinweis: Das Perl 5-Escapezeichen, das zum Festlegen von Unicode verwendet wird, wird nicht von .NET unterstützt. Das Perl 5-Escape-Zeichen hat das Format \x{####…}, wobei #### einer Reihe von Hexadezimalziffern entspricht. Verwenden Sie stattdessen \unnnn.
\ Folgt diesem Zeichen ein Zeichen, das nicht als Escapezeichen erkannt wird, entspricht es diesem Zeichen. \* entspricht beispielsweise einem Sternchen (*) und ist gleich \x2A.

Beispiel

Das folgende Beispiel veranschaulicht die Verwendung von Escapezeichen in einem regulären Ausdruck. Es analysiert eine Zeichenfolge, die die Namen der größten Städte der Welt und deren Einwohnerzahlen im Jahr 2009 enthält. Jeder Ortsname wird durch ein Tabstoppzeichen (\t) oder einen senkrechten Strich (| oder \u007c) von seiner Einwohnerzahl getrennt. Einzelne Orte und ihre Einwohnerzahlen werden durch einen Wagenrücklauf und einen Zeilenvorschub von einander getrennt.

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

Der reguläre Ausdruck \G(.+)[\t\u007c](.+)\r?\n wird entsprechend der Darstellung in der folgenden Tabelle interpretiert.

Muster BESCHREIBUNG
\G Beginnen Sie den Abgleich an der Stelle, wo der letzte Abgleich geendet hat.
(.+) Entspricht einem oder mehreren die oft ausgegebene Befehlszeilen Zeichen. Dies ist die erste Erfassungsgruppe.
[\t\u007c] Entspricht einem Tabulator (\t) oder einem senkrechten Strich (|).
(.+) Entspricht einem oder mehreren die oft ausgegebene Befehlszeilen Zeichen. Dies ist die zweite Erfassungsgruppe.
\r?\n Entspricht 0 (Null) oder einem Vorkommen des Wagenrücklaufs, gefolgt von einer neuen Zeile.

Siehe auch