Backtracking

Aktualisiert: November 2007

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:

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

Siehe auch

Weitere Ressourcen

Reguläre Ausdrücke von .NET Framework