Aracılığıyla paylaş


Match.NextMatch Yöntem

Tanım

Son eşleşmenin sona erdiği konumdan (son eşleşen karakterden sonraki karakterde) başlayarak sonraki eşleşmenin sonuçlarını içeren yeni Match bir nesne döndürür.

public:
 System::Text::RegularExpressions::Match ^ NextMatch();
public System.Text.RegularExpressions.Match NextMatch ();
member this.NextMatch : unit -> System.Text.RegularExpressions.Match
Public Function NextMatch () As Match

Döndürülenler

Sonraki normal ifade eşleşsin.

Özel durumlar

Zaman aşımı oluştu.

Örnekler

Aşağıdaki örnek, normal ifade eşleşmelerini ilk eşleşmenin ötesinde yakalamak için yöntemini kullanır NextMatch .

#using <System.dll>

using namespace System;
using namespace System::Text::RegularExpressions;
void main()
{
   
   String^ text = "One car red car blue car";
   String^ pat = "(\\w+)\\s+(car)";
   
   // Compile the regular expression.
   Regex^ r = gcnew 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{0}", ++matchCount );
      for ( int i = 1; i <= 2; i++ )
      {
         Group^ g = m->Groups[ i ];
         Console::WriteLine( "Group{0}='{1}'", i, g );
         CaptureCollection^ cc = g->Captures;
         for ( int j = 0; j < cc->Count; j++ )
         {
            Capture^ c = cc[ j ];
            System::Console::WriteLine( "Capture{0}='{1}', Position={2}", j, c, 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
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
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim text As String = "One car red car blue car"
      Dim pattern As String = "(\w+)\s+(car)"

      ' Instantiate the regular expression object.
      Dim r As Regex = new Regex(pattern, RegexOptions.IgnoreCase)

      ' Match the regular expression pattern against a text string.
      Dim m As Match = r.Match(text)
      Dim matchcount as Integer = 0
      Do While m.Success
         matchCount += 1
         Console.WriteLine("Match" & (matchCount))
         Dim i As Integer
         For i = 1 to 2
            Dim g as Group = m.Groups(i)
            Console.WriteLine("Group" & i & "='" & g.ToString() & "'")
            Dim cc As CaptureCollection = g.Captures
            Dim j As Integer 
            For j = 0 to cc.Count - 1
              Dim c As Capture = cc(j)
               Console.WriteLine("Capture" & j & "='" & c.ToString() _
                  & "', Position=" & c.Index)
            Next 
         Next 
         m = m.NextMatch()
      Loop
   End Sub
End Module
' 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

Açıklamalar

Bu yöntem, yeniden çağırmaya Regex.Match(String, Int32) ve yeni başlangıç konumu olarak (Index+Length) geçirmeye benzer.

Not

Bu yöntem geçerli örneği değiştirmez. Bunun yerine, sonraki eşleşme hakkında bilgi içeren yeni Match bir nesne döndürür.

Eşleştirme işlemleri için bir zaman aşımı değeri etkinse ve bir sonraki eşleşmeyi bulma girişimi bu zaman aşımı aralığını aşarsa, sonraki eşleşmeyi almaya çalışmak bir oluşturabilir RegexMatchTimeoutException .

Arayanlara Notlar

Bir eşleştirme girişimi yöntemi çağrılarak NextMatch() yinelendiğinde, normal ifade altyapısı boş eşleşmeler özel işlem verir. Genellikle, NextMatch() bir sonraki eşleşme için aramayı tam olarak önceki eşleşmenin kaldığı yerde başlatır. Ancak, boş bir eşleşmeden NextMatch() sonra, yöntem bir sonraki eşleşmeyi denemeden önce bir karakter ilerler. Bu davranış, normal ifade altyapısının dizede ilerleyeceğini garanti eder. Aksi takdirde, boş bir eşleşme herhangi bir ileri hareketle sonuçlanmadığından, sonraki eşleşme önceki eşleşmeyle tam olarak aynı yerden başlar ve aynı boş dizeyle tekrar tekrar eşleşer.

Aşağıdaki örnek, bir gösterim sağlar. Normal ifade deseni a* , "abaabb" dizesindeki "a" harfinin sıfır veya daha fazla oluşumunu arar. Örnekteki çıktıda gösterildiği gibi, arama altı eşleşme bulur. İlk eşleşme girişimi ilk "a" öğesini bulur. İkinci eşleşme, ilk eşleşmenin sona erdiği yerde, ilk b'nin öncesinde başlar; "a" öğesinin sıfır oluşumunu bulur ve boş bir dize döndürür. İkinci eşleşme boş bir dize döndürdüğünden üçüncü eşleşme tam olarak ikinci eşleşmenin sona erdiği yerde başlamaz. Bunun yerine, ilk "b" karakterinden sonra bir karakter başlar. Üçüncü eşleşme iki "a" oluşumunu bulur ve "aa" döndürür. Dördüncü eşleşme denemesi, üçüncü eşleşmenin ikinci "b" harfinden önce sona erdiği yerde başlar ve boş bir dize döndürür. Beşinci eşleşme denemesi, üçüncü "b" karakterinden önce başlayıp boş bir dize döndüren bir karakter ilerler. Altıncı eşleşme son "b" işaretinden sonra başlar ve yeniden boş bir dize döndürür.

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.
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "a*"
      Dim input As String = "abaabb"
      
      Dim m As Match = Regex.Match(input, pattern)
      Do While m.Success
         Console.WriteLine("'{0}' found at index {1}.", 
                           m.Value, m.Index)
         m = m.NextMatch()
      Loop         
   End Sub
End Module
' 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.

Şunlara uygulanır