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

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

Class Sample
  Shared Sub Main()
    ' 「".txt"で終わるかどうか」を表す正規表現
    Dim pattern As String = "\.txt$"

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

    Console.WriteLine(Regex.IsMatch("sample.dat", pattern))
  End Sub
End Class
実行結果
True
False

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

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

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

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

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

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