置き換える必要があるファイルが 100 個ほどあります。
- Eval("something") with Eval("something").ToEncodedString()
- Eval("something").ToString() with Eval("something").ToEncodedString()
これを自動化できる小さな C# アプリケーションを作成しています。しかし、正規表現を形成できません。誰か助けてくれませんか?
次のパターンを使用できます。@"\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));
}