Regex.Matchesメソッドではマッチした箇所すべてが同時に返されますが、例えば、Regex.Matchメソッドで文字列中の最初にマッチする箇所を取得したのち、一旦何らかの処理を行ってから次のマッチ箇所に移動して処理を継続したいといった場合には、NextMatchメソッドを使うことができます。

マッチ箇所が多数になると想定される場合、Regex.Matchesメソッドではそのすべての探索を終えるまで結果が返されませんが、NextMatchメソッドを使うと、まずRegex.Matchメソッドで最初にマッチする箇所を探索し、その後NextMatchメソッドでマッチする箇所を逐次処理していく、といったことができます。

次の例では、正規表現にマッチする全ての箇所を、Regex.Match+Match.NextMatchメソッドと、Regex.Matchesメソッドを使って取得した場合の違いを示しています。 結果はどちらも同じになりますが、マッチ箇所を逐次取得するか、一度に取得するかの違いがある点に注目してください。

Regex.Matchesメソッドを使ってマッチ箇所を一括して取得してから処理する
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文字以上の単語

    ' マッチする箇所すべてを取得して列挙
    For Each m As Match In Regex.Matches(text, pattern)
      ' マッチした箇所の文字列を表示する
      Console.WriteLine(m.Value)
    Next
  End Sub
End Class
実行結果
quick
brown
jumps
over
lazy

MENTAにてテキストチャットによるサポートを行っています。 問題の解決法をお探しの方や.NET/C#を学習中の方はどうぞご利用ください。