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()メソッドは、次の一致を試みる前に、1 つ文字分だけ進めます。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. 正規表現パターン、*文字の 0 個以上の出現箇所を検索文字列"abaabb"の"a"です。The regular expression pattern a* searches for zero or more occurrences of the letter "a" in the string "abaabb". の例では、からの出力に示す 6 つの一致を検索します。As the output from the example shows, the search finds six matches. 最初の一致する試行が 1 つ目を検索します"a"です。The first match attempt finds the first "a". 最初の b の前に、終了と一致する、最初に正確に 2 番目の一致が開始これは、"a"の 0 個の出現箇所を検索し、空の文字列を返します。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. 3 番目の一致が始まらない正確に 2 番目の一致が終了した位置、2 番目の一致には、空の文字列が返されるためです。The third match does not begin exactly where the second match ended, because the second match returned an empty string. 代わりに、最初の"b"後で、1 つの文字を開始します。Instead, it begins one character later, after the first "b". 3 番目の一致では、"a"の 2 つの出現箇所を検索して、"aa"を返します。The third match finds two occurrences of "a" and returns "aa". 4 番目の一致の試行は、2 番目"b"の前に、3 番目の一致の終了位置を開始し、空の文字列を返します。The fourth match attempt begins where the third match ended, before the second "b", and returns an empty string. 3 番目の"b"の前に開始し、空の文字列を返すように、5 番目の一致の試行はもう一度 1 つの文字を進めます。The fifth match attempt again advances one character so that it begins before the third "b" and returns an empty string. 6 番目の一致では、最後の"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]

適用対象