C#正規表現を使用して文字列内の特定の文字をエスケープするにはどうすればよいですか?
This is a test for % and ' thing? -> This is a test for \% and \' thing?
resultString = Regex.Replace(subjectString,
@"(?<! # Match a position before which there is no
(?<!\\) # odd number of backlashes
\\ # (it's odd if there is one backslash,
(?:\\\\)* # followed by an even number of backslashes)
)
(?=[%']) # and which is followed by a % or a '",
@"\", RegexOptions.IgnorePatternWhitespace);
ただし、悪意のあるSQLクエリから身を守ろうとしている場合、正規表現は正しい方法ではありません。
var escapedString = Regex.Replace(input, @"[%']", @"\$1");
必要なのはこれだけです。角かっこ内には、バックスラッシュを使用してエスケープするすべての文字を配置する必要があります。これには、バックスラッシュ文字自体が含まれる場合があります。
これを正規表現でうまく行うことはできないと思いますが、forループを実行するだけで済みます。
var specialChars = new char[]{'%',....};
var stream = "";
for (int i=0;i<myStr.Length;i++)
{
if (specialChars.Contains(myStr[i])
{
stream+= '\\';
}
stream += myStr[i];
}
(1)StringBuilderを使用して、文字列の作成が多すぎないようにすることができます。