繁体   English   中英

如何替换字符串中的未知字符? 通配符?

[英]How do I replace unknown characters in a string? Wildcard?

我有一个字符串..可以说:

string MyString = "SELECT Stuff FROM Table WHERE Code = "Foo" AND DATE=20120101";

我想将20120101替换为? 但是,我搜索的20120101字符串并不总是相同的。 它始终以2开头,并且始终包含8个字符。 可能是20121225、20130510等。

我可以以某种方式使用通配符吗? 如:

string Fixed = MyString.Replace("2*******", "?");

我正在寻找的是这个结果:

MyString = "SELECT Stuff FROM Table WHERE Code = "Foo" AND DATE=?";

您可以使用RegEx:

Regex.Replace(input,@"DATE=""\d*""", "?");

但是,如果这是SQL查询,则最好使用参数化查询来避免SQL注入攻击等。 这是做这些事情的行业标准方法。

string Fixed = Regex.Replace( MyString, @"DATE=2\d{7}", "DATE=?" ); 

或者,使用正向后看

 Replace( MyString, @"(?<=DATE=)2\d{7}", "?" ); 

与整个字符串匹配的正则表达式可能是防止SQL注入攻击的理想选择。 为此,您将使用行首( ^ )和行尾( $ )字符。

这将匹配5或6位数字的长度,并捕获除第一个数字外的所有内容。

^([0-9])([0-9]{4,5})$

如果要捕获以2开头且始终为6位数长的内容; 您可以使用2代替字符类:

^(2)([0-9]{5})$

此技术不允许您直接使用replace方法,您需要提取捕获组1和2,将捕获组2中的所有字符替换为?,然后将它们连接起来。 就像是:

matcher.group(1) + Regex.replace(m.group(2) , ".", "?")

同样,不仔细匹配整个字符串将导致SQL注入。

输入(DELETE * FROM Users Where 1=1) 200000将与这些正则表达式匹配,并以下列方式愉快地插入您的SQL查询: (DELETE * FROM Users Where 1=1) 2?????

您可以使用Regex替换方法:

    string oldstring = "20120101";
    string newstring = Regex.Replace(oldstring, @"^2[0-9]{7}", "?");

那是您要找的东西吗?

string MyString = "SELECT Stuff FROM Table WHERE Code = {0} AND DATE={1}";

这将使您可以对{0}和{1}中的任何内容使用相同的字符串,例如:

String.Format(MyString, codeString, dateString);

您可以根据需要使用任何参数重复使用查询字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM