Tecken rymningar i reguljära uttryck
Omvänt snedstreck (\) i ett reguljärt uttryck anger något av följande:
Tecknet som följer är ett specialtecken, som visas i tabellen i följande avsnitt. Är till exempel
\b
ett fästpunkt som anger att en reguljär uttrycksmatchning ska börja på en ordgräns,\t
representerar en flik och\x020
representerar ett blanksteg.Ett tecken som annars skulle tolkas som en icke kapslade språkkonstruktion bör tolkas bokstavligen. Till exempel börjar en klammerparentes (
{
) definitionen av en kvantifierare, men ett omvänt snedstreck följt av en klammerparentes (\{
) anger att motorn för reguljära uttryck ska matcha klammerparentesen. På samma sätt markerar ett enda omvänt snedstreck början på en escape-språkkonstruktion, men två omvänt snedstreck (\\
) indikerar att motorn för reguljära uttryck ska matcha omvänt snedstreck.
Kommentar
Teckenutrymningar identifieras i reguljära uttrycksmönster men inte i ersättningsmönster.
Tecken rymningar i .NET
I följande tabell visas de tecken som stöds av reguljära uttryck i .NET.
Tecken eller sekvens | beskrivning |
---|---|
Alla tecken förutom följande: . $ ^ { [ ( | ) * + ? \ |
Andra tecken än de som anges i kolumnen Tecken eller sekvens har ingen särskild betydelse i reguljära uttryck. De matchar sig själva. Tecknen som ingår i kolumnen Tecken eller sekvens är särskilda språkelement för reguljära uttryck. Om du vill matcha dem i ett reguljärt uttryck måste de vara undantagna eller inkluderas i en positiv teckengrupp. Till exempel matchar det reguljära uttrycket \$\d+ eller [$]\d+ "$1200". |
\a |
Matchar ett klocktecken (larm) , \u0007 . |
\b |
I en [ character_group] teckenklass matchar en backspace, \u0008 . (Se Teckenklasser.) Utanför en teckenklass \b är en fästpunkt som matchar en ordgräns. (Se Fästpunkter.) |
\t |
Matchar en flik, \u0009 . |
\r |
Matchar en vagnretur, \u000D . Observera att \r inte motsvarar det nya radtecknet, \n . |
\v |
Matchar en lodrät flik, \u000B . |
\f |
Matchar ett formulärflöde, \u000C . |
\n |
Matchar en ny rad, \u000A . |
\e |
Matchar en escape, \u001B . |
\ nnn |
Matchar ett ASCII-tecken, där nnn består av två eller tre siffror som representerar den oktala teckenkoden. Representerar till exempel \040 ett blankstegstecken. Den här konstruktionen tolkas som en backreference om den bara har en siffra (till exempel \2 ) eller om den motsvarar antalet avbildningsgrupper. (Se Backreference-konstruktioner.) |
\x nn |
Matchar ett ASCII-tecken, där nn är en tvåsiffrig hexadecimal teckenkod. |
\c X |
Matchar ett ASCII-kontrolltecken, där X är bokstaven i kontrolltecknet. Till exempel \cC är CTRL-C. |
\u nnnn |
Matchar en UTF-16-kodenhet vars värde är nnnn hexadecimalt. Obs! Den 5-teckensrymning perl som används för att ange Unicode stöds inte av .NET. Teckenrymningen Perl 5 har formatet \x{ ####…} , där ####… är en serie hexadecimala siffror. Använd \u i stället nnnn. |
\ |
När det följs av ett tecken som inte känns igen som ett undantaget tecken matchar det tecknet. Matchar till exempel \* en asterisk (*) och är samma som \x2A . |
Ett exempel
I följande exempel visas användningen av tecken som rymningar i ett reguljärt uttryck. Den parsar en sträng som innehåller namnen på världens största städer och deras befolkningar 2009. Varje ortnamn avgränsas från dess befolkning med en flik (\t
) eller en lodrät stapel (| eller \u007c
). Enskilda städer och deras befolkningar separeras från varandra med en vagnretur och linjematning.
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
Det reguljära uttrycket \G(.+)[\t\u007c](.+)\r?\n
tolkas som det visas i följande tabell.
Mönster | beskrivning |
---|---|
\G |
Börja matchen där den senaste matchen slutade. |
(.+) |
Matcha ett eller flera tecken en eller flera gånger. Det här är den första insamlingsgruppen. |
[\t\u007c] |
Matcha en flik (\t ) eller ett lodrätt fält (|). |
(.+) |
Matcha ett eller flera tecken en eller flera gånger. Det här är den andra insamlingsgruppen. |
\r?\n |
Matcha noll eller en förekomst av en vagnretur följt av en ny rad. |