【问题标题】:How extract all url from text in c# (asp.net mvc)如何从 c# (asp.net mvc) 中的文本中提取所有 url
【发布时间】:2011-08-04 21:23:56
【问题描述】:

我正在创建一个 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

【问题讨论】:

  • 您是指域名,还是像 foo.org/bar.htm 这样的正确 URL? IP地址呢?严格来说是 .com,还是任何 TLD?
  • 文本可以包含url,还是所有元素的url都用逗号分隔?
  • @p.campbell:正确的 url,忽略 ips,任何 TLD
  • @ajc:文本可能包含网址。
  • 我更新了我的答案以考虑空间。添加了 Replace(" ",",") 以说明 " " 分隔。这也适用于多个“”。

标签: c# asp.net asp.net-mvc regex asp.net-mvc-3


【解决方案1】:

这个怎么样:

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);
}

希望对你有帮助...

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

【讨论】:

    【解决方案2】:

    首先,您要设置分隔符。看起来您正在使用逗号,所以应该很容易。

    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)
        }
    }
    

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

    【讨论】:

    • 开枪,看看你的cmets。您可以改为搜索Contains(".com")
    • 不保证url是用逗号隔开的,可能只是空格隔开
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 2013-02-28
    • 2018-01-31
    相关资源
    最近更新 更多