C# Regex.Match与Regex.IsMatch的问题

C# Regex.Match与Regex.IsMatch的问题,c#,regex,C#,Regex,我正在尝试用带有标签的文本替换包含url的文本,我正在尝试使用类似的东西,但我不明白为什么这样做不起作用,也许我太累了。下面是我的测试: [Test] public void Check() { string expUrl = @"^(https?://)" + @"?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" //user@ + @"(([0-9

我正在尝试用带有标签的文本替换包含url的文本,我正在尝试使用类似的东西,但我不明白为什么这样做不起作用,也许我太累了。下面是我的测试:

    [Test]
    public void Check() {
        string expUrl = @"^(https?://)"
        + @"?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" //user@
        + @"(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP- 199.194.52.184
        + @"|" // allows either IP or domain
        + @"([0-9a-z_!~*'()-]+\.)*" // tertiary domain(s)- www.
        + @"([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]" // second level domain
        + @"(\.[a-z]{2,6})?)" // first level domain- .com or .museum is optional
        + @"(:[0-9]{1,5})?" // port number- :80
        + @"((/?)|" // a slash isn't required if there is no file name
        + @"(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$"; 

        const string url = "http://www.google.com";

        var b = Regex.IsMatch(url, expUrl);
        Assert.IsTrue(b);

        var text = string.Format("this is a link... {0} end of link", url);
        var resul = Regex.Match(text, expUrl);
        Assert.IsTrue(resul.Success);
    }

为什么url变量通过了IsMatch检查,但没有通过匹配检查?提前感谢。

因为您的正则表达式以
^
开始,以
$
结束。它们指定匹配必须从字符串的开头开始,并在结尾结束。因为你的匹配在中间,所以没有找到。

因为你开始了你的正则表达式,使用<代码> ^ 并以<代码> $< /代码>结束。它们指定匹配必须从字符串的开头开始,并在结尾结束。因为你的匹配在中间,所以没有找到。

,因为正则表达式以“^”字符开头。指示“https”应该放在第一位,以及$指示字符串应该以最后定义的组结尾


如果删除^和$,这两个测试都将通过

,因为正则表达式以“^”字符开头。。指示“https”应该放在第一位,以及$指示字符串应该以最后定义的组结尾

如果删除^和$,两个测试都将通过

^(https?:/)

您要求它以
http

从更新此行

string expUrl = @"^(https?://)"
+ @"(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$"; 

并从中更新您的最后一行

string expUrl = @"^(https?://)"
+ @"(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$"; 

^(https?:/)

您要求它以
http

从更新此行

string expUrl = @"^(https?://)"
+ @"(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$"; 

并从中更新您的最后一行

string expUrl = @"^(https?://)"
+ @"(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$"; 


仅供参考,对于.NET正则表达式测试来说,这是一个很棒的工具:仅供参考,对于.NET正则表达式测试来说,这是一个很棒的工具:非常感谢,下午5点绝对是一个很难不让一些错误很多的时间,下午5点绝对是一个很难不让一些错误很多的时间,这非常有用谢谢,非常有用