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(String, Int32) をもう一度呼び出し、新しい開始位置として Index + Length を渡すのと似ています。

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

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

空の一致に対して正規表現パターンを照合しようとすると、正規表現エンジンは、無限ループを回避するために、一致を再試行する前に入力文字列の 1 文字を進めます。 呼び出し元は、幅 0 の一致が可能であるため、各一致が少なくとも 1 つの位置で進むものと想定しないでください。

注意 (呼び出し元)

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

具体的な例を次に示します。 正規表現パターン a* 文字列 "abaabb" で文字 "a" が 0 回以上出現する箇所を検索します。 この例の出力に示すように、検索では 6 つの一致が見つかります。 最初の一致試行では、最初の "a" が検索されます。 2 番目の一致は、最初の一致が終了した位置 (最初の b の前) に正確に開始されます。"a" が 0 回検出され、空の文字列が返されます。 3 番目の一致は、2 番目の一致が空の文字列を返したため、2 番目の一致が終了した場所で正確に開始されません。 代わりに、最初の "b" の後で 1 文字後に開始します。 3 番目の一致は、"a" の 2 つの出現箇所を検索し、"aa" を返します。 4 番目の一致試行は、2 番目の "b" の前に 3 番目の一致が終了した場所から始まり、空の文字列を返します。 5 番目の一致の試行では、3 番目の "b" の前に開始され、空の文字列が返されるように、もう一度 1 文字進みます。 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.
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "a*"
      Dim input As String = "abaabb"
      
      Dim m As Match = Regex.Match(input, pattern)
      Do While m.Success
         Console.WriteLine("'{0}' found at index {1}.", 
                           m.Value, m.Index)
         m = m.NextMatch()
      Loop         
   End Sub
End Module
' 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.

適用対象