17

コンストラクターで作成new Regex(string pattern)された正規表現オブジェクトがありますが、後で正規表現オブジェクトが作成されたパターンを確認する方法はありますか?

RegexOptions正規表現またはオブジェクトのいずれかで「パターン」文字列メンバーにアクセスできないようです。

コンテキスト:私が尋ねている理由は、初期化中にいくつかの正規表現オブジェクトを作成し(パターンは構成ファイルに保存されます)、その後、頻繁に使用される別のクラスに渡されます。ただし、パターン文字列を実行時にSQLデータベースに格納されているものと比較する必要もあります。

正規表現オブジェクトに加えて、パターンを含む文字列を渡す必要はありません。また、正規表現は何百回も再利用されるため、起動時に一度オブジェクトを作成することは悪い考えではないと思いますか?

別のアドバイスをお気軽に提供してください。

4

2 に答える 2

42

したがって、デバッガーで正規表現オブジェクトにカーソルを合わせるとパターンが表示されていたため、閉じる必要がありました。Regex.ToString()がパターンを返すことがわかりました。

ToString:Regexコンストラクターに渡された正規表現パターンを返します。

于 2012-08-19T03:32:14.400 に答える
6

Regex.Patternフィールドが内部としてマークされているので、このように実行できるようには見えません。

オブジェクトを一度作成して複数回再利用するのは良い考えだと言っているのは正しいですが、文字列を別のパラメータとして渡すことが唯一の選択肢かもしれません。

これを本当に避けたい場合は、次のように、Regexから継承する新しいクラスを作成してから、コンストラクターでPatternプロパティを設定できます。

public class MyRegex : Regex
{
    public String Pattern {protected set; get;}
    public MyRegex(String Pattern) : Regex(Pattern)
    {
            this.Pattern = Pattern;
    }
}
于 2012-08-19T02:53:05.430 に答える