如何使用C#正則表達式字符串中的某些字符?C#正則表達式來逃避某些字符
This is a test for % and ' thing? -> This is a test for \% and \' thing?
如何使用C#正則表達式字符串中的某些字符?C#正則表達式來逃避某些字符
This is a test for % and ' thing? -> This is a test for \% and \' thing?
resultString = Regex.Replace(subjectString,
@"(?<! # Match a position before which there is no
(?<!\\) # odd number of backlashes
\\ # (it's odd if there is one backslash,
(?:\\\\)* # followed by an even number of backslashes)
)
(?=[%']) # and which is followed by a % or a '",
@"\", RegexOptions.IgnorePatternWhitespace);
不過,如果你想保護自己免受惡意的SQL查詢,正則表達式是不正確的方式去。
這似乎將\\%添加到字符而不是\% –
它添加了一個反斜槓。如果你打印它,它將顯示爲兩個反斜槓,因爲'\%'不是像'\ n'這樣的真正的轉義序列。或者我在這裏誤解了什麼? –
什麼是馬上與MySQL和LIKE一起去?這需要很長時間才能搜索,因爲%正在被使用,它正在掃描所有的表格,而不是僅僅使用%來拉回項目。 –
var escapedString = Regex.Replace(input, @"[%']", @"\$1");
這幾乎是所有你需要的。在方括號內,你應該把每個你希望用一個反斜槓(可能包括反斜槓字符本身)轉義的字符。
只有在角色尚未轉義的情況下,此功能纔有效。然後你會使用這種方法逃避他們。 –
我不認爲這可能與不錯的時尚正則表達式來完成,但是你可以簡單地運行一個循環:
var specialChars = new char[]{'%',....};
var stream = "";
for (int i=0;i<myStr.Length;i++)
{
if (specialChars.Contains(myStr[i])
{
stream+= '\\';
}
stream += myStr[i];
}
(1)你可以使用StringBuilder從太多的字符串創建,以防止。
這將unescape已經逃脫的角色。所以'foo \%bar'將變成'foo \\%bar'。 –
@TimPietzcker,恕我直言,通過當前問題陳述'foo \%bar'應該是'foo \\%bar'。 –
不是。他談論的是用戶能夠提供一個包含'%'的字符串,該字符串需要被轉義,所以他們不會搞亂他的MySQL查詢。如果用戶可以通過在輸入中提供'\%'來規避這種情況,那麼它就會失敗。雖然,邁克沒有明確指出這一點。最有可能的正則表達式不是這個的正確工具。 –
什麼「某些人物」逃避如何?出於什麼目的? – Oded
這是針對來自C#後端的MySQL查詢,用戶可以輸入%,除非對其進行修改,否則將返回所有行。爲了防萬一,我還想換掉其他角色,但現在試試%和'。 –
'string.Replace'不夠好? – Oded