如何从c#(asp.net mvc)中的文本中提取所有url

如何从c#(asp.net mvc)中的文本中提取所有url,c#,asp.net,asp.net-mvc,regex,asp.net-mvc-3,C#,Asp.net,Asp.net Mvc,Regex,Asp.net Mvc 3,我正在创建一个asp.net mvc应用程序,其中有一个文本框,用户可以在其中键入可能包含一些URL的文本,我希望在服务器上解析该文本并提取其中所有可用的URL 可能的文本 abc.com, xyz.com, http://foo.com baar.com http://baz.com, www.foobar.com mosso.com http://subfoo.foo.com bar.baz.com foobar.net baaz2.com morebaaz.com 预期输出阵列 ab

我正在创建一个asp.net mvc应用程序,其中有一个文本框,用户可以在其中键入可能包含一些URL的文本,我希望在服务器上解析该文本并提取其中所有可用的URL

可能的文本

abc.com, xyz.com, http://foo.com
baar.com 
http://baz.com, www.foobar.com
mosso.com
http://subfoo.foo.com
bar.baz.com
foobar.net baaz2.com  morebaaz.com
预期输出阵列

abc.com
xyz.com
foo.com 
baar.com
baz.com
foobar.com
mosso.com
subfoo.foo.com
bar.baz.com   
foobar.net 
baaz2.com  
morebaaz.com

首先,要设置分隔符。看起来你在用逗号,所以这应该很简单

var urlArray = inputString.Split(',', StringSplitOptions.RemoveEmptyEntries)
然后,您可以遍历每个字符串并检查url是否需要修剪

foreach (var urlString in urlArray)
{
    if (urlString.Contains("http://")) // or other things you want to filter out
    {
        urlString = urlString.Substring(urlString.IndexOf("http://") + 7)
    }
}

现在可以显示数组中的每个字符串了

首先,要设置分隔符。看起来你在用逗号,所以这应该很简单

var urlArray = inputString.Split(',', StringSplitOptions.RemoveEmptyEntries)
然后,您可以遍历每个字符串并检查url是否需要修剪

foreach (var urlString in urlArray)
{
    if (urlString.Contains("http://")) // or other things you want to filter out
    {
        urlString = urlString.Substring(urlString.IndexOf("http://") + 7)
    }
}
现在可以显示数组中的每个字符串了

这个怎么样:

string[] domains = text.Replace(" ",",").Replace("http://", "").Replace("www.", "").Replace("ftp://", "").Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
然后可以检查每个字符串是否有有效的url

public static bool isValidUrl(string url)
{
    string pattern = @"^[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*[^\.\,\)\(\s]$";
    Regex reg = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
    return reg.IsMatch(url);
}
希望对你有帮助

编辑:很抱歉,验证失败..现在已修复..

如何:

string[] domains = text.Replace(" ",",").Replace("http://", "").Replace("www.", "").Replace("ftp://", "").Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
然后可以检查每个字符串是否有有效的url

public static bool isValidUrl(string url)
{
    string pattern = @"^[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*[^\.\,\)\(\s]$";
    Regex reg = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
    return reg.IsMatch(url);
}
希望对你有帮助


编辑:抱歉,验证失败..立即修复..

您是指域名还是像
foo.org/bar.htm
这样的正确URL?IP地址呢?com或任何TLD?文本可能包括URL,或所有元素URL都用逗号分隔?@p.campbell:正确的URL,忽略IP,任何TLDs@ajc:文本可能包含URL。我更新了答案以占用空间。添加了替换(“,”,”)以解释“分离”。这也适用于多个“”。您是指域名还是像
foo.org/bar.htm
这样的正确URL?IP地址呢?com或任何TLD?文本可能包括URL,或所有元素URL都用逗号分隔?@p.campbell:正确的URL,忽略IP,任何TLDs@ajc:文本可能包含URL。我更新了答案以占用空间。添加了替换(“,”,”)以解释“分离”。这也适用于多个“”。拍摄,只需阅读您的评论。您可以搜索
包含(“.com”)
?不能保证URL之间用逗号分隔,它们可能只是用空格键分隔,请阅读您的评论。您可以搜索
包含(“.com”)
?不能保证URL用逗号分隔,它们可能只是用空格分隔