1

置き換える必要があるファイルが 100 個ほどあります。

  1. Eval("something") with Eval("something").ToEncodedString()
  2. Eval("something").ToString() with Eval("something").ToEncodedString()

これを自動化できる小さな C# アプリケーションを作成しています。しかし、正規表現を形成できません。誰か助けてくれませんか?

4

1 に答える 1

2

次のパターンを使用できます。@"\bEval\(""(?<Value>.+?)""\)(?:\.ToString\(\))?"

壊す:

  • \bEval: 単語境界を照合して、「Eval」を別の単語の一部としてではなく、単語全体として照合するようにします
  • \("": リテラルの開き括弧と二重引用符 (二重引用符は、逐語的な文字列リテラル (つまり、文字列の前にある @ 記号) を使用するときにエスケープされる方法であるため、2 回表示されます)
  • (?<Value>.+?): 任意の文字の貪欲でない一致である「値」の名前付きキャプチャ グループ (二重引用符で停止します)
  • ""\): 閉じ二重引用符と閉じ括弧
  • (?:\.ToString\(\))?:(?:...)ビットが非キャプチャ グループである場合、.ToString()文字どおり適切なエスケープと一致し、最後?にこのグループをオプションにします

付け替えパターンは@"Eval(""${Value}"").ToEncodedString()"、分かりやすいです。重要な部分は、名前付きキャプチャ グループ "Value" が を使用して参照されること${Value}です。

コード例:

string[] inputs = 
{
    @"Eval(""something"")",
    @"Eval(""hello"").ToString()"
};

string pattern = @"\bEval\(""(?<Value>.+?)""\)(?:\.ToString\(\))?";
string replacement = @"Eval(""${Value}"").ToEncodedString()";

foreach (var input in inputs)
{
    Console.WriteLine(Regex.Replace(input, pattern, replacement));
}
于 2012-06-27T17:03:52.950 に答える