Match.NextMatch Match.NextMatch Match.NextMatch Match.NextMatch Method

Определение

Возвращает новый объект Match с результатами для следующего сопоставления, начиная с позиции, на которой завершилось последнее сопоставление (с символа после последнего сопоставленного символа).Returns a new Match object with the results for the next match, starting at the position at which the last match ended (at the character after the last matched character).

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

Возвраты

Следующее сопоставление регулярному выражению.The next regular expression match.

Исключения

Примеры

В следующем примере используется NextMatch метод для захвата регулярного выражения соответствует за пределами первого совпадения.The following example uses the NextMatch method to capture regular expression matches beyond the first match.

#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

Комментарии

Этот метод аналогичен вызову Regex.Match(String, Int32) снова и передав (Index+Length) в качестве новой начальной позиции.This method is similar to calling Regex.Match(String, Int32) again and passing (Index+Length) as the new starting position.

Примечание

Этот метод не изменяет текущий экземпляр.This method does not modify the current instance. Вместо этого он возвращает новый Match со сведениями о следующего совпадения.Instead, it returns a new Match object that contains information about the next match.

Попытка получения следующего соответствия могут вызывать RegexMatchTimeoutException Если действует значение времени ожидания для операций сопоставления и попытка найти следующего совпадения превышает заданный интервал времени ожидания.Attempting to retrieve the next match may throw a RegexMatchTimeoutException if a time-out value for matching operations is in effect and the attempt to find the next match exceeds that time-out interval.

Примечания для тех, кто вызывает этот метод

При повторном попытки поиска совпадения, вызвав NextMatch() , обработчик регулярных выражений дает пустые соответствия обрабатываются особым образом.When a match attempt is repeated by calling the NextMatch() method, the regular expression engine gives empty matches special treatment. Как правило NextMatch() начинается поиск следующего соответствия ровно там, где предыдущего совпадения остановились.Usually, NextMatch() begins the search for the next match exactly where the previous match left off. Однако после пустого соответствия NextMatch() метод перемещает на один символ, перед попыткой следующего совпадения.However, after an empty match, the NextMatch() method advances by one character before trying the next match. Такое поведение гарантирует, что обработчик регулярных выражений будет протекать строки.This behavior guarantees that the regular expression engine will progress through the string. В противном случае из-за пустого соответствия не приведет к любой перемещение вперед, следующий поиск начнется в том же месте, что и предыдущий, и процесс зациклится же пустая строка.Otherwise, because an empty match does not result in any forward movement, the next match would start in exactly the same place as the previous match, and it would match the same empty string repeatedly.

Ниже приведен пример.The following example provides an illustration. Шаблон регулярного выражения * ищет ноль или более вхождения буквы «» в строке «abaabb».The regular expression pattern a* searches for zero or more occurrences of the letter "a" in the string "abaabb". Как видно из примера, поиск совпадения шесть.As the output from the example shows, the search finds six matches. Первая попытка match находит первый «».The first match attempt finds the first "a". Второй поиск начинается точно в том случае, где первый соответствовать завершается, прежде чем первый b; он выполняет поиск вхождений «a» и возвращает пустую строку.The second match starts exactly where the first match ends, before the first b; it finds zero occurrences of "a" and returns an empty string. Третье соответствие не начинается точно где второй объект match закончилось, так как второй объект match вернул пустую строку.The third match does not begin exactly where the second match ended, because the second match returned an empty string. Вместо этого он начинает один символ позже, после первой «b».Instead, it begins one character later, after the first "b". Третье соответствие находит два вхождения «a» и возвращает «aa».The third match finds two occurrences of "a" and returns "aa". Четвертый попытки поиска совпадения начинается, где закончился третий, перед второй «b» и возвращает пустую строку.The fourth match attempt begins where the third match ended, before the second "b", and returns an empty string. Пятой попытки поиска совпадения снова перемещает один символ, так что он начинается еще до третьей «b» и возвращает пустую строку.The fifth match attempt again advances one character so that it begins before the third "b" and returns an empty string. Шестой поиск начинается после последнего «b» и снова возвращает пустую строку.The sixth match begins after the last "b" and returns an empty string again.

[!code-csharpSystem.Text.RegularExpressions.Match.NextMatch#1] [!code-vbSystem.Text.RegularExpressions.Match.NextMatch#1][!code-csharpSystem.Text.RegularExpressions.Match.NextMatch#1] [!code-vbSystem.Text.RegularExpressions.Match.NextMatch#1]

Применяется к