任何人都可以爲我提供用於驗證字符串的正則表達式,該字符串只允許除反斜線之外的任何特殊字符。我試圖在C#中允許反斜槓的正則表達式#
var regexItem = new Regex("^[a-zA-Z0-9\\\ ]*$");
但它似乎沒有工作
任何人都可以爲我提供用於驗證字符串的正則表達式,該字符串只允許除反斜線之外的任何特殊字符。我試圖在C#中允許反斜槓的正則表達式#
var regexItem = new Regex("^[a-zA-Z0-9\\\ ]*$");
但它似乎沒有工作
您也需要加倍逃脫它(一次C#和一次正則表達式引擎):
var regexItem = new Regex("^[a-zA-Z0-9\\\\ ]*$");
或者你可以使用C的verbatim string feature#(注意@):
var regexItem = new Regex(@"^[a-zA-Z0-9\\ ]*$");
在逐字字符串,反斜槓不interpre開始一個轉義序列,所以你只需要爲Regex引擎轉義一次。
我假設你的當前代碼不能編譯。它應該說「無法識別的轉義序列」。
原因是你有三個反斜槓後面跟着一個空格。前兩個反斜槓被解釋爲表示反斜槓的轉義序列,但第三個反斜槓被解釋爲以空格作爲第二個字符開始轉義序列。這種轉義序列不存在,導致錯誤。
你將不得不通過增加 \s
用於匹配單個\
逃脫\
的正則表達式,以及C#字符串。
反斜槓需要在正則表達式中轉義 - 而且它們也需要在C#中轉義,除非您使用verbatim string literals。因此,無論這些應該工作:
var regexItem = new Regex(@"^[a-zA-Z0-9\\ ]*$");
var regexItem = new Regex("^[a-zA-Z0-9\\\\ ]*$");
這兩個確保以下字符串內容傳遞給Regex
構造:
^[a-zA-Z0-9\\ ]*$
的Regex
代碼就看到雙反斜線並把它當作「我真的想匹配反斜槓字符。」
基本上,您總是需要區分「要傳遞給正則表達式引擎的字符串內容」和「源代碼中的字符串文字表示法」。 (這是真的不只是爲正則表達式,當然,調試器不會在監視窗口等逃避幫助。)
編輯:現在這個問題已被編輯,說明你原本反斜槓,這只是無效的C#。我懷疑你「與三個反斜槓一個字符串」進行瞄準這將是以下任一:
var regexItem = new Regex(@"^[a-zA-Z0-9\\\ ]*$");
var regexItem = new Regex("^[a-zA-Z0-9\\\\\\ ]*$");
...但你並不需要儘量躲避空間正則表達式關心。
請注意,沒有任何內容傳遞給正則表達式,因爲代碼不能編譯。 –
@DanielHilgarth:編輯之前編譯的問題中顯示*的代碼。(當我回答問題時,問題顯示了兩個反斜槓,不是代碼風格,我知道降價有三個反斜槓,但我回答了我看到的問題:) –
我只是格式化了代碼。請查看原始修訂版本的來源。三條反斜槓從一開始就在那裏。 –
「似乎不起作用」的意思?它做什麼,你不指望? –