Match.NextMatch Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Son eşleşmenin sona erdiği konumdan (son eşleşen karakterden sonraki karakterde) başlayarak sonraki eşleşmenin sonuçlarını içeren yeni Match bir nesne döndürür.
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
Döndürülenler
Sonraki normal ifade eşleşsin.
Özel durumlar
Zaman aşımı oluştu.
Örnekler
Aşağıdaki örnek, normal ifade eşleşmelerini ilk eşleşmenin ötesinde yakalamak için yöntemini kullanır 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
Açıklamalar
Bu yöntem, yeniden çağırmaya Regex.Match(String, Int32) ve yeni başlangıç konumu olarak (Index+Length
) geçirmeye benzer.
Not
Bu yöntem geçerli örneği değiştirmez. Bunun yerine, sonraki eşleşme hakkında bilgi içeren yeni Match bir nesne döndürür.
Eşleştirme işlemleri için bir zaman aşımı değeri etkinse ve bir sonraki eşleşmeyi bulma girişimi bu zaman aşımı aralığını aşarsa, sonraki eşleşmeyi almaya çalışmak bir oluşturabilir RegexMatchTimeoutException .
Arayanlara Notlar
Bir eşleştirme girişimi yöntemi çağrılarak NextMatch() yinelendiğinde, normal ifade altyapısı boş eşleşmeler özel işlem verir. Genellikle, NextMatch() bir sonraki eşleşme için aramayı tam olarak önceki eşleşmenin kaldığı yerde başlatır. Ancak, boş bir eşleşmeden NextMatch() sonra, yöntem bir sonraki eşleşmeyi denemeden önce bir karakter ilerler. Bu davranış, normal ifade altyapısının dizede ilerleyeceğini garanti eder. Aksi takdirde, boş bir eşleşme herhangi bir ileri hareketle sonuçlanmadığından, sonraki eşleşme önceki eşleşmeyle tam olarak aynı yerden başlar ve aynı boş dizeyle tekrar tekrar eşleşer.
Aşağıdaki örnek, bir gösterim sağlar. Normal ifade deseni a*
, "abaabb" dizesindeki "a" harfinin sıfır veya daha fazla oluşumunu arar. Örnekteki çıktıda gösterildiği gibi, arama altı eşleşme bulur. İlk eşleşme girişimi ilk "a" öğesini bulur. İkinci eşleşme, ilk eşleşmenin sona erdiği yerde, ilk b'nin öncesinde başlar; "a" öğesinin sıfır oluşumunu bulur ve boş bir dize döndürür. İkinci eşleşme boş bir dize döndürdüğünden üçüncü eşleşme tam olarak ikinci eşleşmenin sona erdiği yerde başlamaz. Bunun yerine, ilk "b" karakterinden sonra bir karakter başlar. Üçüncü eşleşme iki "a" oluşumunu bulur ve "aa" döndürür. Dördüncü eşleşme denemesi, üçüncü eşleşmenin ikinci "b" harfinden önce sona erdiği yerde başlar ve boş bir dize döndürür. Beşinci eşleşme denemesi, üçüncü "b" karakterinden önce başlayıp boş bir dize döndüren bir karakter ilerler. Altıncı eşleşme son "b" işaretinden sonra başlar ve yeniden boş bir dize döndürür.
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.