Método System.Text.RegularExpressions.Regex.Match
Este artigo fornece observações complementares à documentação de referência para essa API.
O Match(String, Int32) método retorna a primeira subcadeia de caracteres que corresponde a um padrão de expressão regular, começando em ou após a posição do startat
caractere, em uma cadeia de caracteres de entrada. O padrão de expressão regular para o qual o Match(String, Int32) método pesquisa é definido pela chamada para um dos construtores de Regex classe. Para obter informações sobre os elementos de linguagem usados para criar um padrão de expressão regular, consulte Linguagem de expressão regular - referência rápida.
O startat
parâmetro
Opcionalmente, você pode especificar uma posição inicial na cadeia de caracteres usando o startat
parâmetro. Todas as correspondências que começam antes startat
na cadeia de caracteres são ignoradas. Se você não especificar uma posição inicial, a pesquisa começará na posição padrão, que é a extremidade esquerda de em uma pesquisa da esquerda para a direita e a extremidade direita de input
input
em uma pesquisa da direita para a esquerda. Apesar de começar em startat
, o índice de qualquer correspondência retornada é relativo ao início da cadeia de caracteres.
Embora o mecanismo de expressão regular não retorne nenhuma correspondência começando antes , ele não ignora a cadeia de caracteres antes startat
startat
. Isso significa que asserções como âncoras ou asserções lookbehind ainda se aplicam à entrada como um todo. Por exemplo, o código a seguir inclui um padrão com uma asserção lookbehind que é satisfeita mesmo que ocorra antes do startat
índice de 5 na cadeia de caracteres de entrada.
using System;
using System.Text.RegularExpressions;
namespace Examples
{
public class Example3
{
public static void Main()
{
string input = "Zip code: 98052";
var regex = new Regex(@"(?<=Zip code: )\d{5}");
Match match = regex.Match(input, 5);
if (match.Success)
Console.WriteLine($"Match found: {match.Value}");
}
}
}
// This code prints the following output:
// Match found: 98052
Dica
- Se um padrão começar com a âncora
^
, masstartat
for maior que 0, nenhuma correspondência será encontrada em uma pesquisa de linha única, pois elas são restringidas a^
começar no índice 0. - O
\G
âncora está satisfeito emstartat
. Por isso, se você quiser restringir uma correspondência para que ela comece exatamente em uma posição de caractere específica na cadeia de caracteres, ancore a expressão regular com um à esquerda para um\G
padrão da esquerda para a direita. Isso restringe a partida, então ela deve começar exatamente emstartat
(ou, quando várias correspondências são desejadas, para que as partidas sejam contíguas).
Pesquisas da direita para a esquerda
Uma pesquisa da direita para a esquerda, ou seja, quando o padrão de expressão regular é construído com a RegexOptions.RightToLeft opção, se comporta das seguintes maneiras:
- A varredura se move na direção oposta e o padrão é correspondido de trás (direita) para frente (esquerda).
- A posição inicial padrão é a extremidade direita da cadeia de caracteres de entrada.
- Se
startat
for especificado, a varredura da direita para a esquerda começa no caractere emstartat
- 1 (nãostartat
). - Quando a âncora é especificada na extremidade direita de um padrão, ela restringe a
\G
(primeira) correspondência para terminar exatamente emstartat
- 1.
Para obter mais informações sobre pesquisas da direita para a esquerda, consulte Modo da direita para a esquerda.
Determinar se uma correspondência foi encontrada
Você pode determinar se o padrão de expressão regular foi encontrado na cadeia de caracteres de entrada verificando o valor da propriedade do Success objeto retornadoMatch. Se uma correspondência for encontrada, a propriedade do Value objeto retornado Match conterá a subcadeia de caracteres que corresponde ao padrão de input
expressão regular. Se nenhuma correspondência for encontrada, seu valor será String.Empty.
Primeira ou várias correspondências
Esse método retorna a primeira subcadeia de caracteres encontrada em ou após a posição do startat
caractere em input
que corresponde ao padrão de expressão regular. Você pode recuperar correspondências subsequentes chamando repetidamente o método do Match.NextMatch objeto retornadoMatch. Você também pode recuperar todas as correspondências em uma única chamada de método chamando o Regex.Matches(String, Int32) método.
Exceções de tempo limite
A RegexMatchTimeoutException exceção será lançada se o tempo de execução da operação correspondente exceder o intervalo de tempo limite especificado pelo Regex.Regex(String, RegexOptions, TimeSpan) construtor. Se você não definir um intervalo de tempo limite ao chamar o construtor, a exceção será lançada se a operação exceder qualquer valor de tempo limite estabelecido para o domínio do aplicativo no qual o Regex objeto é criado. Se nenhum tempo limite for definido na chamada do construtor ou nas propriedades do domínio do Regex aplicativo, ou se o valor de tempo limite for Regex.InfiniteMatchTimeout, nenhuma exceção será lançada.