2

C#正規表現を使用して文字列内の特定の文字をエスケープするにはどうすればよいですか?

This is a test for % and ' thing? -> This is a test for \% and \' thing?
4

3 に答える 3

2
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クエリから身を守ろうとしている場合、正規表現は正しい方法ではありません。

于 2012-06-18T21:15:53.930 に答える
0
var escapedString = Regex.Replace(input, @"[%']", @"\$1");

必要なのはこれだけです。角かっこ内には、バックスラッシュを使用してエスケープするすべての文字を配置する必要があります。これには、バックスラッシュ文字自体が含まれる場合があります。

于 2012-06-18T21:16:06.003 に答える
0

これを正規表現でうまく行うことはできないと思いますが、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を使用して、文字列の作成が多すぎないようにすることができます。

于 2012-06-18T21:18:01.837 に答える