[英]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.