Fugas de caracteres em expressões regulares

A barra invertida (\) em uma expressão regular indica um dos seguintes:

  • O caractere que se segue é um caractere especial, como mostrado na tabela na seção a seguir. Por exemplo, \b é uma âncora que indica que uma correspondência de expressão regular deve começar em um limite de palavra, \t representa uma guia e \x020 representa um espaço.

  • Um caractere que, de outra forma, seria interpretado como uma construção de linguagem sem fuga deve ser interpretado literalmente. Por exemplo, uma chave ({) inicia a definição de um quantificador, mas uma barra invertida seguida de uma chave (\{) indica que o mecanismo de expressão regular deve corresponder à chave. Da mesma forma, uma única barra invertida marca o início de uma construção de linguagem com escape, mas duas barras invertidas (\\) indicam que o mecanismo de expressão regular deve corresponder à barra invertida.

Nota

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

Escapes de caracteres no .NET

A tabela a seguir lista os escapes de caracteres suportados por expressões regulares no .NET.

Personagem ou sequência Description
Todos os caracteres, exceto os seguintes:

. $ ^ { [ ( | ) * + ? \
Caracteres diferentes dos listados na coluna Caractere ou sequência não têm significado especial em expressões regulares, eles correspondem a si mesmos.

Os caracteres incluídos na coluna Caractere ou sequência são elementos especiais de linguagem de expressão regular. Para correspondê-los em uma expressão regular, eles devem ser escapados ou incluídos em um grupo de caracteres positivos. Por exemplo, a expressão \$\d+ regular ou [$]\d+ corresponde a "$1200".
\a Corresponde a um caractere \u0007de sino (alarme), .
\b Em uma [classe de caractere character_group] , corresponde a um backspace, \u0008. (Ver Classes de Personagens.) Fora de uma classe de caracteres, \b é uma âncora que corresponde a um limite de palavras. (Ver Âncoras.)
\t Corresponde a um separador, \u0009.
\r Corresponde a um retorno de carro, \u000D. Observe que \r não é equivalente ao caractere de nova linha, \n.
\v Corresponde a uma guia vertical, \u000B.
\f Corresponde a um feed de formulário, \u000C.
\n Corresponde a uma nova linha, \u000A.
\e Corresponde a uma fuga, \u001B.
\nnn Corresponde a um caractere ASCII, onde nnn consiste em dois ou três dígitos que representam o código de caractere octal. Por exemplo, \040 representa um caractere de espaço. Esta construção é interpretada como uma backreference se tiver apenas um dígito (por exemplo, \2) ou se corresponder ao número de um grupo de captura. (Ver Construções de referência posterior.)
\xnn Corresponde a um caractere ASCII, onde nn é um código de caractere hexadecimal de dois dígitos.
\cX Corresponde a um caractere de controle ASCII, onde X é a letra do caractere de controle. Por exemplo, \cC é CTRL-C.
\unnnn Corresponde a uma unidade de código UTF-16 cujo valor é nnnn hexadecimal. Nota: O escape de caracteres Perl 5 que é usado para especificar Unicode não é suportado pelo .NET. O escape de caracteres Perl 5 tem a forma \x{####…}, onde #### é uma série de dígitos hexadecimais. Em vez disso, use \unnnn.
\ Quando seguido por um personagem que não é reconhecido 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 de escapes de caracteres em uma expressão regular. Ele analisa uma sequência que contém os nomes das maiores cidades do mundo e suas populações em 2009. Cada nome de cidade é separado de sua população por uma guia (\t) ou uma barra vertical (| ou \u007c). Cada cidade e 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, 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

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

Padrão Description
\G Começar a partida onde a última partida terminou.
(.+) Combine qualquer personagem uma ou mais vezes. Este é o primeiro grupo de captura.
[\t\u007c] Corresponder a um separador (\t) ou a uma barra vertical (|).
(.+) Combine qualquer personagem uma ou mais vezes. Este é o segundo grupo de captura.
\r?\n Corresponder a zero ou a uma ocorrência de retorno de carro seguido de uma nova linha.

Consulte também