Regexクラスにおけるパターンマッチングと文字列操作のメソッドは、静的メソッドとしても、インスタンスメソッドとしても呼び出すことができます。 インスタンスメソッドとして呼び出す場合は、正規表現(=Regexクラス)をインスタンス化してから呼び出します。

Regexクラスの静的メソッドを使ってパターンマッチングを行う
using System;
using System.Text.RegularExpressions;

class Sample {
  static void Main()
  {
    // 「".txt"で終わるかどうか」を表す正規表現
    var pattern = @"\.txt$";

    // 文字列が正規表現にマッチするかどうか調べる
    Console.WriteLine(Regex.IsMatch("sample.txt", pattern));

    Console.WriteLine(Regex.IsMatch("sample.dat", pattern));
  }
}
実行結果
True
False

正規表現をインスタンス化する場合、正規表現文字列をコンストラクタで指定します。 静的メソッドとインスタンスメソッドでは機能と結果に違いはありませんが、パフォーマンスと内部の動作には違いがあります。

正規表現を使用する際、正規表現文字列の解析が行われますが、インスタンス化する場合は解析された結果がインスタンス内で保持されます。 一方、静的メソッドの場合は呼び出しのたびに解析が行われることになります。 そのため、同じ正規表現を何度も使用するような状況の場合では、インスタンス化して正規表現を使用することが推奨されます。

なお、Regexクラスをインスタンス化した場合、コンストラクタで指定した正規表現(RegexOptionsも含む)は後から変更することはできません。 Regexインスタンスの作成時に指定された正規表現を取得するにはToStringメソッドを呼び出します。

静的メソッドの場合、一度使用した正規表現はキャッシュされるため、実際には呼び出しのたびに常に解析が行われるとは限りません。 このほか、正規表現実行エンジンの挙動の違いやパフォーマンス上の差異に関しては正規表現のキャッシュとコンパイル §.正規表現のキャッシュでも詳しく解説しています。

Regexコンストラクタでは、正規表現エンジンの動作オプションを指定するRegexOptionsや、パターンマッチングのタイムアウト時間を指定することもできます。