Backtracking
Enthalten reguläre Ausdrücke optionale oder alternative Suchmuster, kann das Suchmodul während der Berechnung einer Eingabezeichenfolge die Suche an irgendeiner Stelle in eine oder mehrere Richtungen verzweigen, um alle möglichen Übereinstimmungen auszuwerten. Ist die Suche in der ersten Richtung nicht erfolgreich, muss die Position in der Eingabezeichenfolge festgehalten werden, wo die Verzweigung auftrat, um nach möglichen alternativen Übereinstimmungen zu suchen.
Ein Beispiel: Es soll mit einem regulären Ausdruck nach den beiden möglichen Schreibweisen für das Wort "grau" im Englischen gesucht werden: "gray" und "grey". Das Alternierungszeichen "|" wird verwendet, um den regulären Ausdruck "gr(a|e)y
" zu erstellen, mit dem eine Übereinstimmung bei beiden Schreibweisen erzielt wird. Bei Anwendung auf die Eingabezeichenfolge "greengraygrowngrey
" sucht das Suchmodul zuerst nach Entsprechungen zu "gray
". Zuerst werden die ersten beiden Zeichen der Eingabezeichenfolge gefunden (gr
). Bei "e
" in "green
" schlägt die Übereinstimmung fehl. Die Eingabezeichenfolge wird bis "r
" zurückverfolgt (dem letzten erfolgreichen Ergebnis vor dem alternativen Zeichen) und nach einer Übereinstimmung mit "grey
" gesucht. Nach dem Scheitern am zweiten "e
" wird die Suche fortgesetzt und schließlich mit den beiden eingebetteten Wörtern "gray
" und "grey
" eine Übereinstimmung gefunden.
Im folgenden Codebeispiel wird gezeigt, wie dieser reguläre Ausdruck gebildet und auf die Eingabezeichenfolge angewendet wird:
' 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 = " & m.Count.ToString())
// Define strings: "gray" and "grey".
Regex r = new Regex("gr(a|e)y");
MatchCollection m = r.Matches("greengraygrowngrey");
Console.WriteLine("Number of groups found = " + m.Count.ToString ());