Regex.Matchesメソッドではマッチした箇所すべてが同時に返されますが、例えば、Regex.Matchメソッドで文字列中の最初にマッチする箇所を取得したのち、一旦何らかの処理を行ってから次のマッチ箇所に移動して処理を継続したいといった場合には、NextMatchメソッドを使うことができます。
マッチ箇所が多数になると想定される場合、Regex.Matchesメソッドではそのすべての探索を終えるまで結果が返されませんが、NextMatchメソッドを使うと、まずRegex.Matchメソッドで最初にマッチする箇所を探索し、その後NextMatchメソッドでマッチする箇所を逐次処理していく、といったことができます。
次の例では、正規表現にマッチする全ての箇所を、Regex.Match+Match.NextMatchメソッドと、Regex.Matchesメソッドを使って取得した場合の違いを示しています。 結果はどちらも同じになりますが、マッチ箇所を逐次取得するか、一度に取得するかの違いがある点に注目してください。
Regex.Match+Match.NextMatchメソッドを使ってマッチ箇所を逐次処理する
Imports System
Imports System.Text.RegularExpressions
Class Sample
Shared Sub Main()
Dim text As String = "The quick brown fox jumps over the lazy dog"
Dim pattern As String = "\w{4,}" ' 5文字以上の単語
Dim m As Match = Regex.Match(text, pattern) ' 最初にマッチする箇所を取得
Do While m.Success
' マッチした箇所の文字列を表示する
Console.WriteLine(m.Value)
' 次にマッチする箇所を取得する
m = m.NextMatch()
Loop
End Sub
End Class
実行結果
quick brown jumps over lazy