Escapes de caracteres em expressões regulares
A barra invertida (\) em uma expressão regular indica uma destas situações:
O caractere que segue é um caractere especial, conforme mostrado na tabela na seção a seguir. Por exemplo,
\b
é uma âncora que indica que uma correspondência da expressão regular deve começar em um limite de palavra,\t
representa uma tabulação e\x020
representa um espaço.Um caractere que, caso contrário, seria interpretado como um constructo de linguagem sem escape deve ser interpretado literalmente. Por exemplo, uma chave (
{
) inicia a definição de um quantificador, mas uma barra invertida seguida por 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 um constructo de linguagem com escape, mas duas barras invertidas (\\
) indicam que o mecanismo de expressão regular deve corresponder à barra invertida.
Observação
Escapes de caracteres são reconhecidos em padrões de expressão regulares, mas não em padrões de substituição.
Escapes de caracteres em .NET
A tabela a seguir lista os escapes de caracteres com suporte das expressões regulares em .NET.
Caractere ou sequência | Descrição |
---|---|
Todos os caracteres, exceto pelos 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 na linguagem de expressão regular. Para que seja feita a correspondência com eles em uma expressão regular, eles devem receber um escape ou ser incluídos em um grupo de caracteres positivo. Por exemplo, a expressão regular \$\d+ ou [$]\d+ corresponde a "$1200". |
\a |
Corresponde a um caractere de sino (alarme), \u0007 . |
\b |
Em uma classe de caracteres [ character_group] , corresponde a uma barra invertida, \u0008 . (Consulte Classes de caracteres.) Fora de uma classe de caracteres, \b é uma âncora que corresponde a um limite de palavra. (Confira Âncoras). |
\t |
Corresponde a uma tabulação, \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 tabulação vertical, \u000B . |
\f |
Corresponde a um avanço de página, \u000C . |
\n |
Corresponde a uma nova linha, \u000A . |
\e |
Corresponde a um escape, \u001B . |
\ nnn |
Corresponde a um caractere ASCII, em que nnn consiste em dois ou três dígitos que representam o código de caracteres octal. Por exemplo, \040 representa um caractere de espaço. Esse constructo é interpretado como referência inversa se tiver apenas um dígito (por exemplo, \2 ) ou se corresponder ao número de um grupo de captura. (Confira Constructos de referência inversa). |
\x nn |
Corresponde a um caractere ASCII, em que nn é um código de caractere hexadecimal com dois dígitos. |
\c X |
Corresponde a um caractere de controle ASCII, em que X é a letra do caractere de controle. Por exemplo, \cC é CTRL-C. |
\u nnnn |
Corresponde a uma unidade de código UTF-16 cujo valor é nnnn hexadecimal. Observação: o escape de caractere Perl 5 que é usado para especificar Unicode não tem suporte no .NET. O escape de caractere Perl 5 tem o formato \x{ ####…} , em que ####… é uma série de dígitos hexadecimais. Em vez disso, use \u nnnn. |
\ |
Quando seguido por um caractere que não é reconhecido como um caractere com escape, corresponde a esse caractere. Por exemplo, \* corresponde a um asterisco (*) e é igual a \x2A . |
Um Exemplo
O exemplo a seguir ilustra o uso de escapes de caracteres em uma expressão regular. Ele analisa uma cadeia de caracteres que contém os nomes das maiores cidades do mundo e suas populações em 2009. O nome de cada cidade é separado da sua população por uma tabulação (\t
) ou uma barra vertical (| ou \u007c
). Cidades individuais e suas populações são separadas umas das outras por um retorno de carro e uma 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 regular \G(.+)[\t\u007c](.+)\r?\n
é interpretada conforme mostrado na tabela a seguir.
Padrão | Descrição |
---|---|
\G |
Inicia a correspondência onde a última correspondência terminou. |
(.+) |
Corresponde qualquer caractere uma ou mais vezes. Este é o primeiro grupo de captura. |
[\t\u007c] |
Corresponde a uma tabulação (\t ) ou a uma barra vertical (|). |
(.+) |
Corresponde qualquer caractere uma ou mais vezes. Este é o segundo grupo de captura. |
\r?\n |
Corresponde a zero ou uma ocorrência de um retorno de carro, seguida por uma nova linha. |