簡體   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