Grupos em expressões regulares são um conceito muito importante e são nossa ponte para aplicativos avançados de expressões regulares.
O conceito de grupo.
Um resultado de correspondência de expressão regular pode ser dividido em várias partes. Depois de usar grupos de maneira flexível, você descobrirá que o Regex é realmente conveniente e poderoso.
Vamos dar um exemplo primeiro:
public static void Main()
{
strings = "21/02/2005";
Regex reg = new Regex(@"(?<y>d{4})-(?<m>d{1,2})-(?<d>d{1,2})",RegexOptions .Compilado);
Correspondência correspondente = reg.Match(s);
int ano = int.Parse(match.Groups["y"].Value);
int mês = int.Parse(match.Groups["m"].Value);
int dia = int .Parse(match.Groups["d"].Value);
Hora DateTime = new DateTime(ano,mês,dia);
Console.WriteLine(hora);
Console.ReadLine();
}
O exemplo acima analisa uma string através de grupos e a converte em uma instância DateTime. É claro que esta função pode ser facilmente implementada usando o método DateTime.Parse.
Neste exemplo, uso (?<nome>) para dividir os resultados de uma partida em três grupos "y", "m" e "d" representando o ano, mês e dia, respectivamente.
Agora que temos o conceito de grupos, vamos ver como agrupá-los. Além do método acima, podemos definir um grupo com um par de colchetes.
público estático vazio Principal()
{
strings = "21/02/2005";
Regex reg = new Regex(@"(d{4})-(d{1,2})-(d{1,2})",RegexOptions.Compiled);
Correspondência correspondente = reg.Match(s);
int ano = int.Parse(match.Groups[1].Value);
int mês = int.Parse(match.Groups[2].Value);
int dia = int .Parse(match.Groups[3].Value);
Hora DateTime = new DateTime(ano,mês,dia);
Console.WriteLine(hora);
Console.ReadLine();
}
Como pode ser visto no exemplo acima, o grupo incluído no primeiro par de colchetes é automaticamente numerado 1, e os colchetes seguintes são numerados 2, 3...
public static void Main()
{
strings = "21/02/2005";
Regex reg = new Regex(@"(?<2>d{4})-(?<1>d{1,2})-(?<3>d{1,2})",RegexOptions .Compilado);
Correspondência correspondente = reg.Match(s);
int ano = int.Parse(match.Groups[2].Value);
int mês = int.Parse(match.Groups[1].Value);
int dia = int .Parse(match.Groups[3].Value);
Hora DateTime = new DateTime(ano,mês,dia);
Console.WriteLine(hora);
Console.ReadLine();
}
acima
, usamos (?<number>) para numerar manualmente o grupo de cada par de colchetes (observe que não defini as posições de 1 e 2 da esquerda para a direita).
Conhecemos as três maneiras de definir Grupo para Regex e as formas correspondentes de referenciar resultados de correspondência de grupo.
Então, em relação à definição de grupo, observe mais dois pontos:
1. Como os colchetes são usados para definir grupos, se você quiser corresponder "(" e ")", use "(" e ")" (sobre todos especial Para a definição de caracteres, consulte a documentação de ajuda da expressão Regex relevante).
2. Se a opção ExplicitCapture for usada ao definir Regex, o segundo exemplo não terá sucesso, porque esta opção requer um grupo definido explicitamente com um número ou nome para capturar e salvar os resultados se você não definir a opção ExplicitCapture, e às vezes. Se você definir uma expressão semelhante a (A|B) e não quiser capturar o resultado disso (A|B), poderá usar a sintaxe de "grupo sem captura", que é definida como ( ?:) Método, para (A|B), você pode defini-lo assim para atingir o propósito de não capturá-lo e salvá-lo na coleção Grupo - (?:A|B).