Match.NextMatch Метод

Определение

Возвращает новый объект 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.

Исключения

Время ожидания истекло.A time-out occurred.

Примеры

В следующем примере 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. Шаблон регулярного выражения а * ищет ноль или более вхождений буквы "a" в строке "абаабб".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. Первая попыток соответствия находит первый "a".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. Третье соответствие не начинается точно там, где заканчивается второе соответствие, поскольку второе совпадение вернуло пустую строку.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]

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