Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. |
Übersetzung
Original
|
Match.NextMatch-Methode
Gibt ein neues Match-Objekt mit den Ergebnissen für die nächste Übereinstimmung zurück und beginnt dabei an der Endposition der vorherigen Übereinstimmung (mit dem Zeichen, das dem letzten übereinstimmenden Zeichen folgt).
Assembly: System (in System.dll)
Diese Methode ähnelt dem erneuten Aufrufen von Regex.Match(String, Int32) und Übergeben von (Index+Length) als neue Anfangsposition.
Hinweis
|
|---|
|
Diese Methode ändert die aktuelle Instanz nicht. Stattdessen gibt sie ein neues Match-Objekt zurück, das Informationen zur nächsten Übereinstimmung enthält. |
Hinweise zu Aufrufern
Wenn ein Übereinstimmungsversuch wiederholt wird, indem die NextMatch-Methode aufgerufen wird, behandelt das Modul für reguläre Ausdrücke leere Übereinstimmungen auf besondere Weise. Üblicherweise beginnt NextMatch die nächste Suche nach der nächsten Übereinstimmung genau dort, wo die vorherige Übereinstimmung aufhört. Nach einem leeren Suchergebnis beginnt die NextMatch-Methode mit der Suche, allerdings erst ein Zeichen weiter. Dieses Verhalten garantiert, dass das Modul für reguläre Ausdrücke durch die Zeichenfolge fortschreitet. Andernfalls würde die nächste Übereinstimmung an genau der gleichen Position wie die vorherige Übereinstimmung beginnen und wiederholt derselben leeren Zeichenfolge entsprechen, da eine leere Übereinstimmung nicht zu einer Vorwärtsbewegung führt.
Dies wird im folgenden Beispiel veranschaulicht. Das Muster eines regulären Ausdrucks a* sucht nach 0 (null) oder mehr Vorkommen des Buchstabens "a" in der Zeichenfolge "abaabb". Wie die Ausgabe vom Beispiel anzeigt, sucht die Suche sechs Übereinstimmungen. Der erste Übereinstimmungsversuch sucht das Erste "a". Die zweite Suche beginnt genau dort, wo die erste endet, vor dem ersten "b". Es werden 0 Vorkommnisse von "a" registriert, und eine leere Zeichenfolge wird zurückgegeben. Die dritte Suche beginnt nun nicht genau dort, wo die zweite aufhörte, da vorher eine leere Zeichenfolge zurückgegeben wurde. Stattdessen beginnt sie ein Zeichen weiter, d. h. nach dem ersten "b". Der Buchstabe "a" kommt zweimal vor, daher wird "aa" zurückgegeben. Der vierte Übereinstimmungsversuch beginnt dort, wo der dritte beendet wurde, nämlich vor dem zweiten "b", wobei eine leere Zeichenfolge zurückgegeben wird. Der fünfte Übereinstimmungsversuch wechselt wieder ein Zeichen vorwärts, damit es vor dem dritten "b" beginnt und eine leere Zeichenfolge zurückgibt. Dies ist auch bei der sechsten Suche der Fall, die nach dem letzten "b" beginnt.
using System; using System.Text.RegularExpressions; public class Example { public static void Main() { string pattern = "a*"; string input = "abaabb"; Match m = Regex.Match(input, pattern); while (m.Success) { Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index); m = m.NextMatch(); } } } // The example displays the following output: // 'a' found at index 0. // '' found at index 1. // 'aa' found at index 2. // '' found at index 4. // '' found at index 5. // '' found at index 6.
Im folgenden Beispiel wird die NextMatch-Methode verwendet, um Übereinstimmungen regulärer Ausdrücke nach der ersten Übereinstimmung zu erfassen.
using System; using System.Text.RegularExpressions; class Example { static void Main() { string text = "One car red car blue car"; string pat = @"(\w+)\s+(car)"; // Instantiate the regular expression object. Regex r = new Regex(pat, RegexOptions.IgnoreCase); // Match the regular expression pattern against a text string. Match m = r.Match(text); int matchCount = 0; while (m.Success) { Console.WriteLine("Match"+ (++matchCount)); for (int i = 1; i <= 2; i++) { Group g = m.Groups[i]; Console.WriteLine("Group"+i+"='" + g + "'"); CaptureCollection cc = g.Captures; for (int j = 0; j < cc.Count; j++) { Capture c = cc[j]; System.Console.WriteLine("Capture"+j+"='" + c + "', Position="+c.Index); } } m = m.NextMatch(); } } } // This example displays the following output: // Match1 // Group1='One' // Capture0='One', Position=0 // Group2='car' // Capture0='car', Position=4 // Match2 // Group1='red' // Capture0='red', Position=8 // Group2='car' // Capture0='car', Position=12 // Match3 // Group1='blue' // Capture0='blue', Position=16 // Group2='car' // Capture0='car', Position=21
Windows 7, Windows Vista SP1 oder höher, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core wird nicht unterstützt), Windows Server 2008 R2 (Server Core wird mit SP1 oder höher unterstützt), Windows Server 2003 SP2
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
Hinweis