【问题标题】:How to to find a domain name inside a query string value如何在查询字符串值中查找域名
【发布时间】:2012-05-16 19:04:58
【问题描述】:

我认为正则表达式可能能够做到这一点,如果不能,那么字符串操作也是一个可行的解决方案。

我需要打开以下输入:

  1. "http://open.thumbshots.org/image.pxf?url=www.party.com"
  2. "http://www.xclicks.net/sc/ct.php?s=9971&l=http%3A//www.google.com/imgres%3F"
  3. "http://whos.amung.us/pingjs/?k=yvybju40twbs&t=Mudswimmer%3A%20Spam%20%26%20Crap%3A%20Http%3AUniversity.com%3A%20No%20Animals%20Allowed..&c=c&y=htt"

进入以下输出:

  1. "party.com"
  2. "google.com"
  3. "University.com"

我不是要获取 URL 的主机名,我想要第二个域,即查询字符串中的域。

【问题讨论】:

标签: asp.net regex query-string


【解决方案1】:

对于涉及正则表达式的所有内容,至少对我而言,存在一定程度的不确定性,但是给您的三个输入以下代码是可行的:

string[] urls = new string[] 
{ 
    "http://open.thumbshots.org/image.pxf?url=www.party.com",
    "http://www.xclicks.net/sc/ct.php?s=9971&l=http%3A//www.google.com/imgres%3F",
    "http://whos.amung.us/pingjs/?k=yvybju40twbs&t=Mudswimmer%3A%20Spam%20%26%20Crap%3A%20Http%3AUniversity.com%3A%20No%20Animals%20Allowed..&c=c&y=htt"
};

foreach (var url in urls)
{
    var result = HttpUtility.ParseQueryString(new Uri(url, UriKind.Absolute).Query);

    foreach (string item in result)
    {
        string value = result.GetValues(item).Single();

        const string DomainNamePattern = "(?:www\\.|\\b)(?<domain>([a-z0-9]([-a-z0-9]*[a-z0-9])?\\.)+((a[cdefgilmnoqrstuwxz]|aero|arpa)|(b[abdefghijmnorstvwyz]|biz)|(cat|com|coop|c[acdfghiklmnorsuvxyz])|d[ejkmoz]|(e[ceghrstu]|edu)|f[ijkmor]|(g[abdefghilmnpqrstuwy]|gov)|h[kmnrtu]|(i[delmnoqrst]|info|int)|(j[emop]|jobs)|k[eghimnprwyz]|l[abcikrstuvy]|(m[acdghklmnopqrstuvwxyz]|mil|mobi|museum)|(n[acefgilopruz]|name|net)|(om|org)|(p[aefghklmnrstwy]|pro)|qa|r[eouw]|s[abcdeghijklmnortvyz]|(t[cdfghjklmnoprtvwz]|travel)|u[agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw]))";

        var match = Regex.Match(
            value,
            DomainNamePattern,
            RegexOptions.IgnoreCase);

        if (match.Success)
        {
            string domain = match.Groups["domain"].Value;

            Console.WriteLine(domain);
        }
    }
}

使用的正则表达式改编自here

如果你运行它,你会得到以下输出:

// party.com
// google.com
// University.com

【讨论】:

    【解决方案2】:

    如果您的链接始终包含 url 查询字符串键,那么您可以简单地通过 String url = Request.QueryString["url"].ToString(); 这将返回 url 的值。

    【讨论】:

    • 如果您考虑到 OP 提供的三个输入,您可以得出结论,您的假设不正确。
    • 是的,但首先他应该获取查询字符串值,然后他可以简单地使用正则表达式获取值。
    • 问题在于“简单”地使用正则表达式获取值 :-) 谢谢您的帮助。
    猜你喜欢
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 2016-01-13
    • 1970-01-01
    • 2013-02-05
    • 2016-06-26
    • 1970-01-01
    相关资源
    最近更新 更多