2015-11-19 45 views
2

我想在C#中的正則表達式允許的一切,但這些特殊字符:*[email protected]#$%^()|\?/<>=+_錯誤解析正則表達式表達

所以我創建了下面的表達式:^[^\*[email protected]#\$%\^()|\\?/<>=+_]+$

然而,當我使用Regex.IsMatch方法驗證與正則表達式模式用戶輸入我得到一個錯誤,指出:

System.ArgumentException:解析 「!?*〜!@#$%^()| \/<> = + _」 - 量詞 {x,y}沒有任何結果。

在谷歌搜索我發現我的表達是不正確地轉義後 - 但逃脫。有人可以幫助我理解爲什麼我得到這個錯誤嗎?

+1

@AlonMass:請發表完整的相關代碼。 –

回答

3

使用@作逐字字符串

string myRegex = @"^[^\*[email protected]#\$%\^()|\\?\/<>=+_]+$"; 

由於stribizhev這裏的地方的問題是:

string myRegex = "^[^\*[email protected]#\$%\^()|\\?/<>=+_]+$"; 
        ^ ^^ 

事實上,你得到with this code的錯誤是:

prog.cs(7,24): error CS1009: Unrecognized escape sequence `\*' 
prog.cs(7,30): error CS1009: Unrecognized escape sequence `\$' 
prog.cs(7,33): error CS1009: Unrecognized escape sequence `\^' 

你的正則表達式應該是這樣的:

var rx = @"^[^*[email protected]#$%^()|\\?/<>=+_]+$"; 
+0

如果這是正確的答案,OP發佈了錯誤的錯誤。使用常規字符串文字時引發的錯誤是'錯誤CS1009:無法識別的轉義序列\ *'等。 –

+0

@stribizhev糾正(我認爲) –

+0

爲什麼在C#regex中轉義'/'?這裏的正則表達式聲明看起來像'string myRegex = @「^ [^ *〜!@#$%^()| \\?/ <> = + _] + $」;'。 –