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 \u0007 sino (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.) |
\x nn |
Corresponde a um personagem ASCII, onde nn é um código de caracteres hexadémico de dois dígitos. |
\c X |
Corresponde a um personagem de controlo ASCII, onde X é a letra do personagem de controlo. Por exemplo, \cC é CTRL-C. |
\u nnnn |
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 \u nnnn. |
\ |
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. |