C# 是否可以使用正则表达式消除单引号之间的单引号
有一个非常大的应用程序,它在执行查询时存在单引号发送到数据库的问题,现在使用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个单引号替换,要么删除它也行。这应该行得通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
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发布的另一种模式的回应,该模式已被删除。你是对的,第二个加号是不必要的,不过,好的接球。