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
戻り値
次の正規表現一致。
例外
タイムアウトが発生しました。
例
次の例では、 メソッドを 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 番目の一致は、最初の一致が終了する位置 (最初の b の前) から始まります。"a" が 0 回検出され、空の文字列が返されます。 3 番目の一致は、2 番目の一致が終了した場所では正確に開始されません。2 番目の一致では空の文字列が返されるためです。 代わりに、最初の "b" の後に 1 文字後に開始されます。 3 番目の一致では、"a" の 2 つの出現箇所が検出され、"aa" が返されます。 4 番目の一致の試行は、3 番目の一致が終了した場所 (2 番目の "b" の前) から始まり、空の文字列を返します。 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.
適用対象
.NET