Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以使用正则表达式消除单引号之间的单引号_C#_Regex - Fatal编程技术网

C# 是否可以使用正则表达式消除单引号之间的单引号

C# 是否可以使用正则表达式消除单引号之间的单引号,c#,regex,C#,Regex,有一个非常大的应用程序,它在执行查询时存在单引号发送到数据库的问题,现在使用replace函数将单引号替换为2个单引号,从而解决了特定属性的问题,但是我想做一个最小的改变,它可以解决DAL层中的整个应用程序问题 我的问题是: 执行程序sp_procedurename('1','test','tester's code','0') 上述字符串应转换为 执行程序sp_procedurename('1','test','tester's code','0')或 执行过程sp_procedurename

有一个非常大的应用程序,它在执行查询时存在单引号发送到数据库的问题,现在使用replace函数将单引号替换为2个单引号,从而解决了特定属性的问题,但是我想做一个最小的改变,它可以解决DAL层中的整个应用程序问题

我的问题是:

执行程序sp_procedurename('1','test','tester's code','0')

上述字符串应转换为

执行程序sp_procedurename('1','test','tester's code','0')或 执行过程sp_procedurename('1','test','testers code','0')

要么用2个单引号替换,要么删除它也行。

这应该行得通

  string pattern = @"(\w+)'(\w+)";
  string replacement = "$1''$2";
  string input = "EXECUTE PROCEDURE sp_procedurename ('1', 'test', 'tester's code', '0')";
  string result = Regex.Replace(input, pattern, replacement);

如果不需要单引号,请使用“$1$2”作为替换。

我建议使用参数化查询。这正是他们没有的安全漏洞。你能说“之后”是否总是有字符s吗?就像测试人员的代码一样,这只适用于只有单词的参数。例如,“12测试者的代码”将不起作用…它确实起作用,我刚刚测试过它\w也匹配字符串中的数字。如果我错了,请纠正我,因为您比我有更多的代表性,并且可能对您正在谈论的内容有更好的了解,但是使用lookahead/lookback是否比简单的字符模式有更多的开销?在
模式=@“(\w+”(\w+)”(\w+”)中没有lookahead/lookback;这是一个简单的字符模式。如果您真的担心性能,那么第二个
+
可以省略,因为在引号后搜索(并替换)多个字符没有意义。您可能还想测试有无第一个
+
的性能。Adrian,我的评论是对有人使用lookahead发布的另一种模式的回应,该模式已被删除。你是对的,第二个加号是不必要的,不过,好的接球。