正则表达式捕获超过预期

时间:2015-06-29 19:33:30

标签: c# regex

新爸爸,所以我的眼睛累了,我正在试图弄清楚为什么这个代码:

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

可发出:

  

foo.com

我只有一个正斜杠,那么为什么两个都被捕获在组中以进行替换?

2 个答案:

答案 0 :(得分:4)

Regex.Replace

  

在指定的输入字符串中,将所有与正则表达式模式匹配的字符串替换为指定的替换字符串。

每个/匹配正则表达式模式@"(https:)?\/"。如果您尝试例如"https://foo/./com/",所有/都将被移除。

答案 1 :(得分:4)

如果您检查生成的匹配项,则会变得清晰。将其添加到您的代码中:

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

您会发现https:/已匹配并被替换,/已匹配并被替换(因为https:是可选的)并且foo.com仍然存在。