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 \u0007 de 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.) |
\x nn |
Corresponde a um caractere ASCII, onde nn é um código de caractere hexadecimal de dois dígitos. |
\c X |
Corresponde a um caractere de controle ASCII, onde 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. 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 \u nnnn. |
\ |
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. |