Match.NextMatch メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
最後の一致が終了した位置 (最後に一致した文字の後の文字) から始まる、次の一致の結果を含む新しい 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.