Match.NextMatch メソッド

定義

一致する対象が最後に見つかった位置の終了位置 (最後に一致した文字の後の文字) から開始して、次に一致する対象を検索した結果の新しい Match オブジェクトを返します。

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

戻り値

Match

次の正規表現一致。

例外

タイムアウトが発生しました。

次の例では、メソッドを使用して、 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

注釈

このメソッドは Regex.Match(String, Int32) 、を再度呼び出し、 Index+Length 新しい開始位置として () を渡すことに似ています。

注意

このメソッドは、現在のインスタンスを変更しません。 代わりに、 Match 次の一致に関する情報を含む新しいオブジェクトを返します。

次の一致を取得しようとする RegexMatchTimeoutException と、一致操作のタイムアウト値が有効であり、次の一致を検索する試みがタイムアウト間隔を超えた場合にがスローされる可能性があります。

注意 (呼び出し元)

メソッドを呼び出すことによって一致試行が繰り返されると NextMatch() 、正規表現エンジンは空の一致文字列を特別な処理に渡します。 通常、は、 NextMatch() 前の一致箇所と同じ位置にある次の一致の検索を開始します。 ただし、空の一致の後、 NextMatch() メソッドは次の一致を試行する前に1文字進めます。 この動作により、正規表現エンジンが文字列を処理することが保証されます。 それ以外の場合は、空の一致によって前方移動が行われないため、次の一致は前の一致とまったく同じ場所で開始され、同じ空の文字列と繰り返し一致します。

具体的な例を次に示します。 正規表現パターン a * は、文字列 "abaabb" で、文字 "a" の0回以上の出現を検索します。 この例の出力が示すように、検索では6つの一致が検出されます。 最初の一致試行で最初の "a" が検索されます。 2番目の一致は、最初の一致が終了した場所から最初の2つ前まで、"a" の0回の出現を検出し、空の文字列を返します。 3番目の一致は、2番目の一致が終了した場所を正確に開始しません。これは、2番目の一致が空の文字列を返したためです。 代わりに、最初の "b" の後に1文字後に開始します。 3番目の一致では、"a" の2回の出現が検出され、"aa" が返されます。 4回目の一致試行は、3番目の一致が終了し、2番目の "b" の前に、空の文字列を返します。 5回目の一致では、1つの文字を再び進め、3番目の "b" の前に開始し、空の文字列を返します。 6番目の一致は、最後の "b" の後に始まり、空の文字列を返します。

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.

適用対象