新爸爸,让我的眼睛都累了,我试图找出为什么这个代码:正则表达式捕获超过预期
var regex = new Regex(@"(https:)?\/");
Console.WriteLine (regex.Replace("https://foo.com", ""));
发出:
foo.com
我只有一个正斜杠,那么为什么两个都被捕获在组中进行更换?
新爸爸,让我的眼睛都累了,我试图找出为什么这个代码:正则表达式捕获超过预期
var regex = new Regex(@"(https:)?\/");
Console.WriteLine (regex.Replace("https://foo.com", ""));
发出:
foo.com
我只有一个正斜杠,那么为什么两个都被捕获在组中进行更换?
在指定的输入字符串,替换匹配指定的替换字符串正则表达式模式的所有字符串。
每一个/
匹配的正则表达式@"(https:)?\/"
。如果您尝试"https://foo/./com/"
,全部/
将被删除。
Criminy - 因为'https'是可选的,所有的斜线将始终匹配。 –
@MisterEpic我建议使用var regex = new Regex(@“(https?:(\ /){2})?”); – iheanyi
如果您检查生成的匹配项,就会变得清晰。添加到您的代码:
var matches = regex.Matches("https://foo.com");
foreach (Match match in matches)
{
Console.WriteLine(match.Value);
}
而且你会看到https:/
匹配和更换,/
匹配和替换(因为https:
是可选的)和foo.com
依然存在。
恭喜您进入父权领域! :) –