C# Regex.Match与Regex.IsMatch的问题
我正在尝试用带有标签的文本替换包含url的文本,我正在尝试使用类似的东西,但我不明白为什么这样做不起作用,也许我太累了。下面是我的测试: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
[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点绝对是一个很难不让一些错误很多的时间,这非常有用谢谢,非常有用