Retrocedendo
Quando as expressões regulares tem padrões correspondentes opcionais ou alternativos, o mecanismo de correspondência de expressões regulares, em algum ponto de sua avaliação de uma sequência de entrada, pode ramificar em um ou mais direções para realizar todas as correspondências possíveis.Se a correspondência não for bem-sucedida na primeira direção em que o mecanismo procura, ele deve fazer backup de sua posição na sequência de entrada para onde ocorreu a ramificação e tentar uma correspondência alternativa.
Considere, por exemplo, uma expressão regular, projetada para corresponder as dois grafias de cinza cor: cinza e cinza.O caractere de alternância | é usado para criar a expressão regular gr(a|e)y, que pode fazer a correspondência entre qualquer ortografia.Quando aplicado à sequência de entrada greengraygrowngrey, assuma que o mecanismo tenta corresponder primeiro ao gray.Ele coincide com os dois primeiros caracteres na sequência de entrada gr, em seguida, falha em e no green.Ele retrocede para r (a última bem-sucedida correspondência antes do caractere alternativo) e tenta corresponder ao grey.Falhando no segundo e, o mecanismo continua a pesquisa e basicamente corresponderá as duas palavras incorporadas gray e grey.
O exemplo de código a seguir mostra como criar esta expressão regular e aplicá-la para a sequência de entrada.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
' Define strings: "gray" and "grey".
Dim r As New Regex("gr(a|e)y")
Dim m As MatchCollection = r.Matches("greengraygrowngrey")
Console.WriteLine("Number of groups found: {0}", m.Count)
End Sub
End Module
' The example displays the following output:
' Number of groups found: 2
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
// Define strings: "gray" and "grey".
Regex r = new Regex("gr(a|e)y");
MatchCollection m = r.Matches("greengraygrowngrey");
Console.WriteLine("Number of groups found: {0}", m.Count);
}
}
// The example displays the following output:
// Number of groups found: 2