Sdílet prostřednictvím


Ří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 \u000Dna 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 \u000Cformulář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.)
\xnn Odpovídá znaku ASCII, kde nn je dvouciferný šestnáctkový kód znaku.
\cX Odpovídá znaku ASCII ovládacího prvku, kde X je písmeno znaku ovládacího prvku. Například \cC ctrl-C.
\unnnn 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 \unnnn.
\ 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.

Viz také