2009-03-03 10 views
1

私は私のプロジェクトで使用する必要がある共通正規表現の正規表現アセンブリを構築したいと思います。これらの正規表現を使用して、パターンにマッチさせたり、パターンを置き換えたりします。私はアセンブリを構築するこのコードを使用します。コンパイル正規表現を置き換えます

AssemblyName an = new AssemblyName("MyRegExp"); 

RegexCompilationInfo[] rciList = { 
    new RegexCompilationInfo(@"\<b\>(.+?)\<\/b\>", RegexOptions.IgnoreCase, "BoldCode", "MyRegExp", true), 
    new RegexCompilationInfo(@"\<i\>(.+?)\<\/i\>", RegexOptions.IgnoreCase, "ItalicCode", "MyRegExp", true) 
}; 

Regex.CompileToAssembly(rciList, an); 

ただし、置換文字列を指定する場所が見つかりません。実際には、これらのregexpを使ってhtmlファイルのタグを置き換えます。したがって、置換文字列も定数です。

私は呼び出し元のアセンブリが、異なる呼び出しアセンブリ間で常に同じであるため、置換文字列を指定したくありません。どんなアドバイスを事前に

おかげで、 ファビアン

EDIT1:

は、たぶん私は、私が何をする必要があるかmisexplained。私は常に同じパターンに置き換えられるいくつかの正規表現を持っています。私はすべて文字列を文字列に置き換えます。文字列を文字列と置き換えます。

コンパイルされた正規表現は素晴らしいですが、コンパイルされたアセンブリの置換パターンが見つからない場合があります。私は、Tranformationの配列を構築するHelperクラスで回避策を構築することができました。

私の最初の質問はこれ以上でした:それはコンパイルされた正規表現で置換文字列を指定する方法ですか?

答えて

2

これは "CompileToAssembly"メソッドで直接サポートされているようには見えないので、置換文字列を正規表現に関連付ける別の方法を見つける必要があります。生成されたアセンブリに置換文字列を格納したい場合は、カスタム属性(「CompileToAssembly」の3番目のパラメータ)で指定する方法が考えられます。

は、私は、これはカスタム(単一正規表現のためではないと)アセンブリ属性生成と思いますが、あなたは、例えばのようなもの使用することができます(注:あなたは、これは自分の属性を宣言する必要があると思います):

[RegexReplaceString("RegexName", "Replacement")] 

あなたのアプリケーションから生成されたDLLを使用する場合、いくつかの処理を追加して、置き換えられた文字列を読み込んで、コンパイルされたRegexオブジェクトと共にいくつかのクラスに格納する必要があります。これは少し難しいですが、少なくとも、それはあなたが目指しているものなら、生成されたDLLに置換文字列を格納しましょう。

+0

Regexはコンパイル時に置換文字列を知っていることをサポートしていません。その間、私はすべてのことをするヘルパークラスを書くことができました。 –

3

.NET Reflectorは、このような場合に非常に役立ちます。 Regex.CompileToAssemblyによって作成されたアセンブリを見てください

作成された型はRegexから派生しています。したがって、を正確にとして使用すると、インラインで作成されたRegexインスタンスと同じです。


Re。問題の編集:答えは次のように表示されます。生成されたアセンブリに指定された文字列を含める方法がありません。

ただし、CompileToAssemblyを使用すると、複数ステップのビルドプロセス(アセンブリジェネレータの作成、アセンブリの作成、アセンブリの参照)が行われるため、これを拡張して他のコンテンツを追加することができます。正規表現アセンブリを作成し、置換文字列アセンブリを作成し、ilmergeを使用してそれらを1つに結合します。

+0

私は私の最初の質問を明確にしました。 –

関連する問題