Řídicí sekvence znaků v regulárních výrazech
Zpětné lomítko (\) v regulárním výrazu označuje jednu z těchto věcí:
Znak, který následuje, je speciální znak, jak je znázorněno v tabulce v následující části. Je to například ukotvení, které označuje,
\b
že shoda regulárního výrazu by měla začínat na hranici slova,\t
představuje tabulátor a\x020
představuje mezeru.Znak, který by jinak byl interpretován jako nekonstrukce jazyka by měl být interpretován doslova. Například složená závorka (
{
) začíná definici kvantifikátoru, ale zpětné lomítko následované závorkou (\{
) označuje, že modul regulárních výrazů by měl odpovídat složené závorce. Podobně jedno zpětné lomítko označuje začátek konstruktoru řídicího jazyka, ale dvě zpětná lomítka (\\
) označují, že modul regulárních výrazů by měl odpovídat zpětnému lomítku.
Poznámka:
Řídicí znaky jsou rozpoznány ve vzorech regulárních výrazů, ale ne v náhradních vzorech.
Řídicí znaky v .NET
Následující tabulka obsahuje seznam řídicích znaků podporovaných regulárními výrazy v .NET.
Znak nebo posloupnost | Popis |
---|---|
Všechny znaky s výjimkou následujících znaků: . $ ^ { [ ( | ) * + ? \ |
Jiné znaky než znaky uvedené ve sloupci Znak nebo sekvence nemají žádný zvláštní význam v regulárních výrazech; odpovídají sobě. Znaky zahrnuté ve sloupci Znak nebo sekvence jsou speciální prvky jazyka regulárních výrazů. Aby bylo možné je spárovat v regulárním výrazu, musí být uchycené nebo zahrnuté do skupiny kladných znaků. Například regulární výraz \$\d+ nebo [$]\d+ odpovídá $1200. |
\a |
Odpovídá znaku zvonu (alarmu), \u0007 . |
\b |
[ V character_group] třídě znaků odpovídá backspace, \u0008 . (Viz Třídy znaků.) Mimo třídu znaků je kotva, \b která odpovídá hranici slova. (Viz Ukotvení.) |
\t |
Odpovídá tabulátoru \u0009 . |
\r |
Odpovídá návratu \u000D na začátek řádku . Všimněte si, že \r není ekvivalentem znaku nového řádku, \n . |
\v |
Odpovídá svislé tabulátoru \u000B . |
\f |
Odpovídá informačnímu kanálu \u000C formuláře . |
\n |
Odpovídá novému řádku \u000A . |
\e |
Odpovídá úniku, \u001B . |
\ nnn |
Odpovídá znaku ASCII, kde nnn se skládá ze dvou nebo tří číslic, které představují osmičkový kód znaku. Například \040 představuje znak mezery. Tento konstruktor se interpretuje jako backreference, pokud má pouze jednu číslici (například \2 ) nebo pokud odpovídá počtu zachytávaných skupin. (Viz Konstrukce zpětného odvozu.) |
\x nn |
Odpovídá znaku ASCII, kde nn je dvouciferný šestnáctkový kód znaku. |
\c X |
Odpovídá znaku ASCII ovládacího prvku, kde X je písmeno znaku ovládacího prvku. Například \cC ctrl-C. |
\u nnnn |
Odpovídá jednotce kódu UTF-16, jejíž hodnota je šestnáctková hodnota nnnn . Poznámka: Rozhraní .NET nepodporuje řídicí znak Perl 5 znaků, který se používá k určení unicode. Řídicí znak Perl 5 má tvar \x{ ####…} , kde ####… je řada šestnáctkových číslic. Místo toho použijte \u nnnn. |
\ |
Pokud následuje znak, který není rozpoznán jako řídicí znak, odpovídá tomuto znaku. Například \* odpovídá hvězdičkě (*) a je stejná jako \x2A . |
Příklad
Následující příklad ukazuje použití řídicích znaků v regulárním výrazu. Analyzuje řetězec, který obsahuje názvy největších měst světa a jejich obyvatel v roce 2009. Každý název města je oddělený od populace tabulátorem (\t
) nebo svislým pruhem (| nebo \u007c
). Jednotlivá města a jejich populace jsou navzájem odděleny návratem a přímkou.
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
Regulární výraz \G(.+)[\t\u007c](.+)\r?\n
se interpretuje, jak je znázorněno v následující tabulce.
Vzor | Popis |
---|---|
\G |
Zahajte shodu, kde skončila poslední shoda. |
(.+) |
Porovná libovolný znak jednou nebo vícekrát. Toto je první zachytávající skupina. |
[\t\u007c] |
Porovná kartu (\t ) nebo svislou čáru (|). |
(.+) |
Porovná libovolný znak jednou nebo vícekrát. Toto je druhá zachytávající skupina. |
\r?\n |
Porovná žádný nebo jeden výskyt návratu na začátek řádku následovaný novým řádkem. |