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

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

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

Regex.Match+Match.NextMatchメソッドを使ってマッチ箇所を逐次処理する
using System;
using System.Text.RegularExpressions;

class Sample {
  static void Main()
  {
    var text = "The quick brown fox jumps over the lazy dog";
    var pattern = @"\w{4,}"; // 4文字以上の単語

    var m = Regex.Match(text, pattern); // 最初にマッチする箇所を取得

    while (m.Success) {
      // マッチした箇所の文字列を表示する
      Console.WriteLine(m.Value);

      // 次にマッチする箇所を取得する
      m = m.NextMatch();
    }
  }
}
実行結果
quick
brown
jumps
over
lazy