2014-09-11 102 views
1

有人可以向我解釋當使用正則表達式時需要使用雙反斜線或單個反斜槓來轉義角色嗎?正則表達式用或\轉義?

大量引用的網絡中使用單反斜線和在線正則表達式測試單反斜線工作,但在實踐中我經常要使用雙反斜線逃脫字符。

例如:

"SomeString\." 

作品在網上正則表達式測試和匹配「SomeString」後跟一個點。

然而,在實踐中我必須使用雙引號轉義:

if (Regex.IsMatch(myString, "SomeString\\.")) 
+0

雖然面向對JavaScript中,你會發現[這個答案](http://stackoverflow.com/a/6803651/433790)有幫助。 – ridgerunner 2014-09-11 14:51:05

回答

3

C#不具備建設正則表達式,如Perl,Ruby或JavaScript的做了特殊的語法。它改爲使用一個接受字符串的構造函數。但是,字符串有它們自己的轉義機制,因爲你希望能夠在字符串中加引號。因此,有兩個級別的轉義。

因此,在正則表達式中,w表示字母「w」,而\w表示單詞字符。但是,如果你犯了一個字符串"\w",你逃脫字符「W」,這是沒有意義的,因爲字符「W」是不是一個引號或反斜線,所以"w" == "\w"。然後這個只包含「w」的字符串被傳遞給正則表達式構造函數,並且最終匹配字母「w」而不是任何單詞字符。因此,要將反斜槓傳遞給regexp,需要在字符串文字(\\w)中放入兩個反斜槓:解釋字符串時將刪除一個反斜槓,正則表達式將使用一個反斜槓。

直接使用正則表達式時(例如在大多數在線正則表達式測試人員或使用逐字字符串@"..."時),您不必擔心字符串文字的解釋,並且始終只寫一個反斜槓(除外當你想匹配反斜槓本身時,但是你正在反向正則表達式的反斜槓,而不是字符串)。

2

我使用逐字符號@(逐字字符串),則不需要再次轉義反斜線。

if (Regex.IsMatch(myString, @"SomeString\.")) 
+1

這是件好事,但沒有真正回答使用正則表達式時,當一個雙反斜線或單反斜線需要使用轉義字符_Can別人的問題解釋一下嗎?_我沒有BTW DV – 2014-09-11 09:19:54

+0

我知道這是可能的,但我正在尋找解釋,爲什麼在我的例子中需要它,而不是在你的例子中? – Duane 2014-09-11 09:20:04

+0

@Duane在Java或C#,如果你只使用'「'作爲分隔符,你需要轉義反斜線一個更time..And也見本或Amadan答案以獲得更多信息。 – 2014-09-11 09:25:54

2

\還是在C#爲字符串文字的轉義字符,以便所述第一\被逸出第二\被傳遞給該方法,第二個被逸出。在正則表達式中。

用途:

if (Regex.IsMatch(myString, @"SomeString\.")) 

如果你想避免雙重轉義。

+0

+1解釋爲什麼。 – Rawling 2014-09-11 09:19:23