2015-06-29 54 views
3

新爸爸,讓我的眼睛都累了,我試圖找出爲什麼這個代碼:正則表達式捕獲超過預期

var regex = new Regex(@"(https:)?\/"); 
Console.WriteLine (regex.Replace("https://foo.com", "")); 

發出:

foo.com

我只有一個正斜槓,那麼爲什麼兩個都被捕獲在組中進行更換?

+1

恭喜您進入父權領域! :) –

回答

4

Regex.Replace

在指定的輸入字符串,替換匹配指定的替換字符串正則表達式模式的所有字符串。

每一個/匹配的正則表達式@"(https:)?\/"。如果您嘗試"https://foo/./com/",全部/將被刪除。

+0

Criminy - 因爲'https'是可選的,所有的斜線將始終匹配。 –

+0

@MisterEpic我建議使用var regex = new Regex(@「(https?:(\ /){2})?」); – iheanyi

4

如果您檢查生成的匹配項,就會變得清晰。添加到您的代碼:

var matches = regex.Matches("https://foo.com"); 
foreach (Match match in matches) 
{ 
    Console.WriteLine(match.Value); 
} 

而且你會看到https:/匹配和更換,/匹配和替換(因爲https:是可選的)和foo.com依然存在。