English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Expressão regular É um padrão de correspondência para o texto de entrada.
A framework .Net oferece um motor de expressão regular que permite essa correspondência.
O padrão é composto por um ou mais caracteres, operadores e estruturas.
A seguir está listado os caracteres, operadores e estruturas usados para definir os tipos de expressões regulares.
Escapamento de caractere
Classe de caractere
Ponto de referência
Construção de grupo
Limitador
Construção de referência inversa
Construção alternativa
Replacement
Miscellaneous constructions
O caractere de barra invertida (\) no expressão regular indica que o caractere subsequente é um caractere especial ou deve ser interpretado literalmente.
A tabela a seguir lista os caracteres de escape:
Caractere de escape | Description | Pattern | Coincidência |
---|---|---|---|
\a | Coincide com o caractere de alarme (bell) \u0007 Coincide. | \a | "Warning!" + '\u0007' dentro do "\u0007" |
\b | Dentro da classe de caractere, coincide com a tecla de backspace \u0008 Coincide. | [\b]{3,} | O "\b\b\b\b" dentro do "\b\b\b\b" |
\t | Coincide com o caractere de tabulação \u0009 Coincide. | (\w+)\t | O "Name\tAddr\t" dentro do "Name\t" e "Addr\t" |
\r | Coincide com o caractere de retorno de carro \u000D. (\r e o caractere de nova linha \n não são equivalentes.). | \r\n(\w+) | O "\r\nHello\nWorld." dentro do "\r\nHello" |
\v | Coincide com o caractere de tabulação vertical \u000B. | [\v]{2,} | O "\v\v\v" dentro do "\v\v\v" |
\f | Coincide com o caractere de página \u000C. | [\f]{2,} | O "\f\f\f" dentro do "\f\f\f" |
\n | Coincide com o caractere de nova linha \u000A. | \r\n(\w+) | O "\r\nHello\nWorld." dentro do "\r\nHello" |
\e | Coincide com o caractere de escape \u001B Coincide. | \e | "\x001B" dentro do "\x001B" |
\ nnn | Especifique um caractere usando a representação octal (nnn são de dois a três dígitos). | \w\040\w | O "a b" e o "c d" em "a bc d" |
\x nn | Especifique um caractere usando a representação hexadecimal (nn são exatamente dois dígitos). | \w\x20\w | O "a b" e o "c d" em "a bc d" |
\c X \c x | Coincide com o caractere de controle especificado por X ou x, onde X ou x é a letra do caractere de controle. | \cC | "\x0003" dentro do "\x0003" (Ctrl-C) |
\u nnnn | Coincide com um caractere Unicode usando a representação hexadecimal (representado por um número de quatro dígitos). | \w\u0020\w | O "a b" e o "c d" em "a bc d" |
\ | Coincide com o caractere após o caractere de escape não reconhecido. | \d+[\+-x\*]\d+\d+[\+-x\*\d+ | "(2+2) * 3*9" dentro de "2+2" and "3*9" |
A classe de caractere coincide com qualquer caractere de um grupo de caracteres.
A tabela a seguir lista as classes de caractere:
Classe de caractere | Description | Pattern | Coincidência |
---|---|---|---|
[character_group] | Coincide com qualquer caractere individual no character_group. Padrão: a correspondência é sensível a maiúsculas e minúsculas. | [mn] | O "m" em "mat", o "m" e o "n" em "moon" |
[^character_group] | Não: Coincide com qualquer caractere individual que não esteja no character_group. Padrão: os caracteres do character_group são sensíveis a maiúsculas e minúsculas. | [^aei] | dentro de "avail" "v" e "l" |
[ first - last ] | Intervalo de caracteres: correspondem a qualquer caractere individual dentro do intervalo de first a last. | [b-d] | [b-d]irds podem corresponder a Birds, Cirds, Dirds |
. | Caracteres de coringa: correspondem a qualquer caractere individual, exceto \n. Para correspondência com o caractere ponto (.) ou \u002E), você deve adicionar o caractere de escape (\.) antes do caractere. | a.e | dentro de "ter" "ave" dentro de "mate" "ate" |
\p{nome} | Corresponde a name Corresponde a qualquer caractere único dentro da categoria Unicode genérica ou do bloco nomeado especificado. | \p{Lu} | dentro de "Cidade Luzes" "C" e "L" |
\P{nome} | Corresponde a não name Corresponde a qualquer caractere único dentro da categoria Unicode genérica ou do bloco nomeado especificado. | \P{Lu} | dentro de "Cidade" "i" "t" e "y" |
\w | Corresponde a qualquer caractere alfanumérico. | \w | "Sala#1dentro de "R" "o" "m" e "1" |
\W | Corresponde a qualquer caractere não alfanumérico. | \W | "Sala#1dentro de "#" |
\s | Corresponde a qualquer caractere branco. | \w\s | "ID A1.3dentro de " |
\S | Corresponde a qualquer caractere não branco. | \s\S | "int __ctr" dentro de " _" |
\d | Corresponde a qualquer número decimal. | \d | "4 = IV" dentro de "4" |
\D | Corresponde a qualquer caractere que não seja decimal. | \D | "4 = IV" dentro de " ", "=", " ", "I" e "V" |
Os pontos de referência ou as afirmações de zero largura podem fazer com que a correspondência seja bem-sucedida ou falhada, dependendo da posição atual na string, mas eles não farão com que o motor avançe na string ou use caracteres.
A tabela a seguir lista os pontos de referência:
Asoção | Description | Pattern | Coincidência |
---|---|---|---|
^ | A correspondência deve começar no início da string ou da linha. | ^\d{3} | "567-777-" dentro de "567" |
$ | A correspondência deve aparecer no final da string ou no final da linha ou no final da string ou \n antes. | -\d{4$ | "8-12-2012" dentro de "-2012" |
\A | A correspondência deve aparecer no início da string. | \A\w{4} | "Code-007-" dentro de "Code" |
\Z | A correspondência deve aparecer no final da string ou aparecer no final da string ou \n antes. | -\d{3}\Z | "Bond-901-007" dentro de "-007" |
\z | A correspondência deve aparecer no final da string. | -\d{3}\z | "-901-333" dentro de "-333" |
\G | A correspondência deve aparecer no local onde a correspondência anterior terminou. | \G(\d\) | "(1)](3)](5])7])(9)" dentro de "(1)" de "(3)" e "("5)" |
\b | Coincidir com um limite de palavra, que é a posição entre uma palavra e um espaço. | er\b | Coincidir com "never" no "er", mas não com "verb" no "er". |
\B | Coincidir com não limite de palavra. | er\B | Coincidir com "verb" no "er", mas não com "never" no "er". |
Construções de grupo descrevem subexpressões de expressões regulares, geralmente usadas para capturar substrings de strings de entrada.
A tabela a seguir lista as construções de grupo:
Construção de grupo | Description | Pattern | Coincidência |
---|---|---|---|
( subexpression ) | Capturar subexpressão correspondente e atribuí-la a um número de ordem zero. | (\w)1 | "deep" 中的 "ee" |
(?< name >subexpression) | Capturar subexpressão correspondente em um grupo nomeado. | (?< double>\w)\k< double> | "deep" 中的 "ee" |
(?< name1 -name2 >subexpression) | Definir grupo equilibrado. | (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ | "3+2^((1-3)*(3-1))" 中的 "((1-3)*(3-1))" |
(?: subexpression) | Definir grupo não capturado. | Write(?:Line)? | "Console.WriteLine()" 中的 "WriteLine" |
(?imnsx-imnsx:subexpression) | aplicar ou desativar subexpression opções especificadas. | A\d{2}(?i:\w+)\b | "A12xl A12XL a12xl" 中的 "A12xl" e "A12XL" |
(?= subexpression) | Afirmativa de zero largura, predição positiva e avanço. | \w+(?=\.) | "He is. The dog ran. The sun is out." 中的 "is", "ran" e "out" |
(?! subexpression) | Afirmativa de zero largura, predição negativa e avanço. | \b(?!un)\w+\b | "unsure sure unity used" 中的 "sure" e "used" |
(?<=subexpression) | Afirmativa de zero largura, revisão posterior e interrupção. | (?A+B+) | "1ABB 3ABBC 5AB 5"AC" 中的 "1ABB", "3ABB" e "5AB" |
using System; using System.Text.RegularExpressions; public class Example { public static void Main() { string input = "1851 1999 1950 1905 2003"; string pattern = @"(?<=19)\d{2}; foreach (Match match in Regex.Matches(input, pattern)) Console.WriteLine(match.Value); } }
Os limitadores especificam quantas instâncias do elemento anterior (pode ser caractere, grupo ou classe de caracteres) devem existir na string de entrada para que o item coincida. Os limitadores incluem os elementos linguísticos listados na tabela a seguir.
A tabela a seguir lista os limitadores:
Limitador | Description | Pattern | Coincidência |
---|---|---|---|
* | Coincidir com a ocorrência do elemento anterior zero ou mais vezes. | \d*.\d | ".0"、 "19.9"、 "219.9" |
+ | Coincidir com a ocorrência do elemento anterior uma ou mais vezes. | "be+" | "been" com "bee", "bent" com "be" |
? | Coincidir com a ocorrência do elemento anterior zero ou uma vez. | "rai?n" | "ran"、 "rain" |
{ n } | Coincidir com a ocorrência do elemento anterior exatamente n vezes. | ",\d{3} | "1,043.6" dentro de "043", "9,876,543,210" dentro de "876"、 ",543" e ",210" |
{ n, } | Coincidir com a ocorrência do elemento anterior pelo menos n vezes. | "\d{2,}" | "166"、 "29"、 "1930" |
{ n, m } | Coincidir com a ocorrência do elemento anterior pelo menos n vezes, mas não mais do que m vezes. | "\d{3,5} | "166", "17668", "193024" dentro de "19302" |
*? | Coincidir com a ocorrência do elemento anterior zero ou mais vezes, mas a menor quantidade possível. | \d*?\.\d | ".0"、 "19.9"、 "219.9" |
+? | Coincidir com a ocorrência do elemento anterior uma ou mais vezes, mas a menor quantidade possível. | "be+?" | "been" com "be", "bent" com "be" |
?? | Coincidir com a ocorrência do elemento anterior zero ou uma vez, mas a menor quantidade possível. | "rai??n" | "ran"、 "rain" |
{ n }? | Coincidir com o elemento inicial exatamente n vezes. | ",\d{3}?" | "1,043.6" dentro de "043", "9,876,543,210" dentro de "876"、 ",543" e ",210" |
n, }? | Coincidir com a ocorrência do elemento anterior pelo menos n vezes, mas a menor quantidade possível. | "\d{2,}?" | "166"、 "29" and "1930" |
n, m }? | Coincidir com a ocorrência do elemento anterior entre n e m, mas a menor quantidade possível. | "\d{3,5}?" | "166", "17668", "193024" dentro de "193" e "024" |
As referências inversas permitem identificar subexpressões que coincidiram anteriormente dentro da mesma expressão regular.
A tabela a seguir lista as construções de referência inversa:
Construção de referência inversa | Description | Pattern | Coincidência |
---|---|---|---|
\ number | Referência inversa. Coincide com o valor do subexpressão numerada. | (\w)1 | "seek" com "ee" |
\k< name > | Referência inversa nomeada. Coincide com o valor da expressão nomeada. | (?< char>\w)\k< char> | "seek" com "ee" |
Construções alternativas são usadas para modificar a expressão regular para habilitar either/ou coincidir.
A tabela a seguir lista as construções alternativas:
Construção alternativa | Description | Pattern | Coincidência |
---|---|---|---|
| | Coincide com qualquer elemento separado por um caractere vertical (|). | th(e|is|at) | "this is the day. " in "the" and "this" |
(?( expression )yes | no ) | If the regular expression pattern is matched by expression, then match yes; otherwise match the optional no Part. expression is interpreted as a zero-width assertion. | (?(A)A\d{2}\b|\b\d{3}\b) | "A10 C103 910" in "A10" and "910" |
(?( name )yes | no ) | If the name or a named or numbered capture group has a match, then match yes; otherwise match the optional no. | (?< quoted>")?(?(quoted).+?"|\S+\s) | "Dogs.jpg "Yiska playing.jpg"" in Dogs.jpg and "Yiska playing.jpg" |
Replacement is the regular expression used in the replacement pattern.
The following table lists characters used for replacement:
Character | Description | Pattern | Replacement pattern | Input string | Resulting string |
---|---|---|---|---|---|
$number | Replace by group number Matched substring. | \b(\w+)(\s)(\w+)\b | $3$2$1 | "one two" | "two one" |
${name} | Replace by named group name Matched substring. | \b(?< word1>\w+)(\s)(?< word2>\w+)\b | ${word2} ${word1} | "one two" | "two one" |
$$ | Replace the character "$". | \b(\d+)\s?USD | $$$1 | "103 USD" | "$103" |
$& | Replace a copy of the entire matched item. | (\$*(\d*(\.+\d+)?){1) | **$& | "$1.30" | "**$1.30**" |
$` | Replace all text before the match. | B+ | $` | "AABBCC" | "AAAACC" |
$' | Replace all text after the match. | B+ | $' | "AABBCC" | "AACCCC" |
$+ | Replace the last captured group. | B+(C+) | $+ | "AABBCCDD" | AACCDD |
$_ | Replace the entire input string. | B+ | $_ | "AABBCC" | "AAAABBCCCC" |
The following table lists various miscellaneous constructions:
Construction | Description | Exemplo |
---|---|---|
(?imnsx-imnsx) | Set or disable options such as case-insensitive in the middle of the pattern. | \bA(?i)b\w+\b Matches "ABA Able Act" for "ABA" and "Able" |
(?#comment) | Inline comment. The comment ends at the first right parenthesis. | \bA(?#match words starting with A)\w+\b |
# #}} | [Fim de linha] | O comentário começa com um # não escapado e continua até o final da linha.+(?x)\bA\w |
Classe Regex
A classe Regex é usada para representar uma expressão regular.
Número | Método & Descrição |
---|---|
1 | public bool IsMatch(
string input
) Indica se o padrão regular especificado na função de construção Regex foi encontrado na string de entrada. |
2 | public bool IsMatch(
string input,
int startat
) Indica se o padrão regular especificado na função de construção Regex foi encontrado na string de entrada, começando a partir da posição especificada na string. |
3 | public static bool IsMatch(
string input,
string pattern
) Indica se o padrão regular especificado na função de construção Regex foi encontrado na string de entrada. |
4 | public MatchCollection Matches(
string input
) Procure todas as ocorrências do padrão regular na string de entrada. |
5 | public string Replace(
string input,
string replacement
) Substitua todas as ocorrências do padrão regular na string de entrada pela string de substituição especificada. |
6 | public string[] Split(
string input
) Divida a string de entrada em um array de substrings com base na posição definida pelo padrão regular na função de construção Regex. |
Para obter uma lista completa de propriedades da classe Regex, consulte a documentação do C# da Microsoft.
O exemplo a seguir coincide com palavras que começam com 'S':
Quando o código acima for compilado e executado, ele produzirá o seguinte resultado:
Palavras que começam com 'S': A Expressão: \bS\S* Splendid Suns
A seguir, um exemplo de correspondência de palavras que começam com 'm' e terminam com 'e':
using System; using System.Text.RegularExpressions; namespace RegExApplication { class Program { private static void showMatch(string text, string expr) { Console.WriteLine("A Expressão: " + expr); MatchCollection mc = Regex.Matches(text, expr); foreach (Match m in mc) { Console.WriteLine(m); } } static void Main(string[] args) { string str = "fazer labirinto e gerenciar para medir ele"; Console.WriteLine("Palavras que começam com 'm' e terminam com 'e':"); showMatch(str, @"\bm\S*e\b"); Console.ReadKey(); } } }
Quando o código acima for compilado e executado, ele produzirá o seguinte resultado:
Palavras que começam com 'm' e terminam com 'e': A Expressão: \bm\S*e\b fazer labirinto gerenciar medir
A seguir, um exemplo de substituição de espaços em branco adicionais:
using System; using System.Text.RegularExpressions; namespace RegExApplication { class Program { static void Main(string[] args) { string input = "Hello World "; string pattern = "\\s"+"; string replacement = " "; Regex rgx = new Regex(pattern); string result = rgx.Replace(input, replacement); Console.WriteLine("Cadeia Original: {0}", input) Console.WriteLine("Cadeia de Substituição: {0}", result); Console.ReadKey(); } } }
Quando o código acima for compilado e executado, ele produzirá o seguinte resultado:
Cadeia Original: Hello World Cadeia de Substituição: Hello World