Personagem escapa em expressões regulares

O retrocesso (\) numa expressão regular indica um dos seguintes:

  • O personagem que o segue é um personagem especial, como mostrado na tabela na secção seguinte. Por exemplo, \b é uma âncora que indica que uma correspondência de expressão regular deve começar num limite de palavras, \t representa um separador, e \x020 representa um espaço.

  • Um personagem que de outra forma seria interpretado como uma construção linguística não paisagístico deve ser interpretado literalmente. Por exemplo, uma cinta ({) inicia a definição de um quantificador, mas uma contrala detrás seguida de uma cinta (\{) indica que o motor de expressão regular deve corresponder à cinta. Da mesma forma, uma única pestana marca o início de uma construção linguística em fuga, mas duas pestanas traseiras (\\) indicam que o motor de expressão regular deve corresponder ao retrocesso.

Nota

As fugas de caracteres são reconhecidas em padrões de expressão regulares, mas não em padrões de substituição.

Personagem Escapa em .NET

A tabela que se segue lista as fugas do personagem suportadas por expressões regulares em .NET.

Caráter ou sequência Description
Todos os caracteres, com exceção dos seguintes:

. $ ^ { [ ( | ) * + ? \
Os caracteres que não os listados na coluna De caracteres ou sequências não têm um significado especial em expressões regulares; eles combinam-se.

Os caracteres incluídos na coluna de caracteres ou sequência são elementos especiais da linguagem de expressão regular. Para combiná-los numa expressão regular, devem ser escapados ou incluídos num grupo de caracteres positivos. Por exemplo, a expressão \$\d+ regular ou [$]\d+ corresponde a "$1200".
\a Corresponde a um caráter \u0007sino (alarme) .
\b Numa [aula de personagens character_group] , corresponde a um espaço traseiro, \u0008. (Ver classes de caracteres.) Fora de uma classe de personagens, \b é uma âncora que combina com uma palavra limite. (Ver Âncoras.)
\t Corresponde a uma conta, \u0009.
\r Corresponde a um retorno de carruagem, \u000D. Note que \r não é equivalente ao caráter newline, \n.
\v Corresponde a uma lingueta vertical, \u000B.
\f Corresponde a um formulário, \u000C.
\n Corresponde a uma nova linha. \u000A
\e Corresponde a uma fuga. \u001B
\nnn Corresponde a um caráter ASCII, onde nnn consiste em dois ou três dígitos que representam o código de caracteres octal. Por exemplo, \040 representa um personagem espacial. Esta construção é interpretada como uma retroferência se tiver apenas um dígito (por exemplo, \2) ou se corresponder ao número de um grupo de captura. (Ver Backreference Constructs.)
\xnn Corresponde a um personagem ASCII, onde nn é um código de caracteres hexadémico de dois dígitos.
\cX Corresponde a um personagem de controlo ASCII, onde X é a letra do personagem de controlo. Por exemplo, \cC é CTRL-C.
\unnnn Corresponde a uma unidade de código UTF-16 cujo valor é nnnn hexadecimal. Nota: A fuga de caracteres Perl 5 que é usada para especificar o Unicode não é suportada por .NET. A fuga do personagem Perl 5 tem a forma \x{####…}, onde #### está uma série de dígitos hexadémicos. Em vez disso, use \unnnn.
\ Quando seguido por uma personagem que não é reconhecida como um personagem escapado, corresponde a esse personagem. Por exemplo, \* corresponde a um asterisco (*) e é o mesmo que \x2A.

Um exemplo

O exemplo a seguir ilustra o uso do carácter escapa numa expressão regular. Analisa uma cadeia que contém os nomes das maiores cidades do mundo e suas populações em 2009. Cada nome da cidade é separado da sua população por um separador (\t) ou uma barra vertical (| ou ).\u007c As cidades individuais e as suas populações são separadas umas das outras por um retorno de carruagem e alimentação de linha.

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, Turkey|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, Turkey     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, Turkey|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, Turkey     11,372,613

A expressão \G(.+)[\t\u007c](.+)\r?\n regular é interpretada como mostrado na tabela seguinte.

Padrão Description
\G Comece a partida onde terminou o último jogo.
(.+) Combine qualquer personagem uma ou mais vezes. Este é o primeiro grupo de captura.
[\t\u007c] Combine uma lingueta (\t) ou uma barra vertical (|).
(.+) Combine qualquer personagem uma ou mais vezes. Este é o segundo grupo de captura.
\r?\n Match zero ou uma ocorrência de um retorno de transporte seguido de uma nova linha.

Ver também