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.) |
\x nn |
Entspricht einem ASCII-Zeichen, wobei nn ein zweistelliger Hexadezimalzeichencode ist. |
\c X |
Entspricht einem ASCII-Steuerzeichen, wobei X der Buchstabe des Steuerzeichens ist. Beispielsweise ist \cC STRG+C. |
\u nnnn |
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 \u nnnn. |
\ |
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. |