2015-06-29 25 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依然存在。