Regex.Matchメソッドが正規表現にマッチする最初の箇所を返すのに対し、Regex.Matchesメソッドマッチする全ての箇所を返します。

Matchesメソッドはマッチする全ての箇所をMatchクラスのコレクション型MatchCollectionで返します。 このコレクションを列挙することにより、マッチした個々の箇所に対応するMatchインスタンスを参照することができます。 マッチする箇所がなければ、空のコレクションが返されます。

次のコードでは、正規表現を使って文字列中に含まれる4文字以上の単語をすべて探索し、表示しています。

(この例で用いている正規表現\w{4,}は、「アルファベット・かな・漢字などの文字(\w)が、4文字以上続く({4,})箇所」を表します。)

Regex.Matchesメソッドを使って文字列中の正規表現にマッチする部分をすべて取得して列挙する
using System;
using System.Text.RegularExpressions;

class Sample {
  static void Main()
  {
    var text = "The quick brown fox jumps over the lazy dog すばしっこい 茶色の 狐は のろまな 犬を 飛び越える";

    // 正規表現にマッチする箇所をすべて取得する
    var matches = Regex.Matches(text, @"\w{4,}");

    // マッチした箇所をひとつずつ列挙して表示する
    // (MatchCollectionは非ジェネリックで型指定されていないIEnumeratorを返すため、varによる暗黙的な型指定はできない)
    foreach (Match m in matches) {
      Console.WriteLine("{0,-10} ({1}, {2})", m.Value, m.Index, m.Length);
    }
  }
}
実行結果
quick      (4, 5)
brown      (10, 5)
jumps      (20, 5)
over       (26, 4)
lazy       (35, 4)
すばしっこい     (44, 6)
のろまな       (58, 4)
飛び越える      (66, 5)

Matchインスタンスからマッチ結果を取得する方法については§.マッチ箇所の探索 (Regex.Match)を参照してください。

MatchCollectionは当初、非ジェネリックなIEnumerableのみを実装した型指定されていないコレクションとして登場し、その後.NET Standard 2.1/.NET Core 2.0にてIEnumerable<Match>/ICollection<Match>/IList<Match>を実装するようになり、型指定されたコレクションとして扱うことができるようになっています。

一方、IEnumerable<Match>の実装以降でも、MatchCollection.GetEnumeratorメソッドは(おそらく)互換性のため型指定されていないIEnumeratorを返す実装のままとなっています。 このため、MatchCollectionをforeachで列挙する場合、varによる暗黙的な型指定を行うとobjectとして列挙されます

代替手法やMatchCollectionのジェネリックインターフェイスについてより詳しくは正規表現の構造化および処理(マッチ・グループ・キャプチャ) §.MatchCollection・GroupCollection・CaptureCollectionとジェネリックコレクションインターフェイスを参照してください。