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. 正規表現パターンa *は、文字列 "abaabb" で、文字 "a" の0回以上の出現を検索します。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. 最初の一致試行で最初の "a" が検索されます。The first match attempt finds the first "a". 2番目の一致は、最初の一致が終了した場所から最初の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回目の一致試行は、3番目の一致が終了し、2番目の "b" の前に、空の文字列を返します。The fourth match attempt begins where the third match ended, before the second "b", and returns an empty string. 5回目の一致では、1つの文字を再び進め、3番目の "b" の前に開始し、空の文字列を返します。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]

適用対象