2011-07-06 112 views
1

我想找出解決我遇到的問題。如果我執行下面的C#代碼:如果我考察m.SuccessC#.NET的正則表達式問題

Regex r = new Regex("[\\r\\n]*"); 
Match m = r.Match("\\r\\n"); 

,我得到的真實的值,這是正確的。但是,如果我檢查m.Length的值,則得到的值爲0。如果我檢查m.Value,我也會得到一個空白值。我在我的正則表達式中錯過了什麼嗎?我的印象是,要麼m.Success需要是假的,m.Length是0否則m.Success需要是真實的,m.Length需要大於0.任何幫助clearifing這將不勝感激!

+0

不應該將第二行設爲匹配m = r.Match(「\ r \ n」);'?我想這是一個字符串與實際cr/lf字符,不逃脫? –

+0

如果你遺漏了一個'\',它確實做了這項工作...但我不知道這是不是意圖... – Flawless

回答

6

Match.Success返回true,因爲正則表達式應該與「\ r」或「\ n」的「零個或多個」實例匹配,即回車符或換行符(如「*」符號)。然而,在你給的字符串(Match內)中包含了反斜槓,r,反斜槓,n,它既不是回車符也不是換行符,所以匹配長度爲零。 (在正則表達式中,「反斜槓,n」被視爲單個字符,換行符)。

爲了避免將來進一步的混亂,嘗試前綴正則表達式用「@」符號可能避免一些混亂與反斜線在正則表達式是如何工作的,是這樣的:

@"[\r\n]*" 

希望這使得它更清楚一點,「\ r」代表換行符,「\ n」代表換行符。相關正則表達式:

@"[\\rn]*" 

將匹配反斜槓,r和/或n的零個或多個實例。 (因爲該符號在正則表達式中被專門處理,所以加倍反斜槓是必要的。)

+0

這樣一個frickin'我的部分明顯的錯誤。謝謝彼得 – Icemanind