【问题标题】:Regex which matches any subdomain匹配任何子域的正则表达式
【发布时间】:2013-02-12 21:11:43
【问题描述】:

我正在寻找正则表达式,它将匹配任何以“http”或“https”开头并包含特定域的 URL。如果域是“stackoverflow.com”,我应该能够从字符串中提取所有域和子域匹配项(仅限 .com,因此不应匹配 .net、.org 等),然后将它们添加到列表中循环遍历所有匹配项。我该怎么做?

到目前为止,这是我找到的最好的解决方法(搜索名为“somestring”的字符串并将结果添加到列表“myList”中)

       Regex r = new Regex(@"(?<Protocol>\w+):\/\/(?<Domain>[\w@][\w.:@]+)\/?[\w\.?=%&=\-@/$,]*");
       Match m = r.Match(somestring);
       while (m.Success) 
       {
           if ((m.Value).Contains("stackoverflow.com"))
           {
           myList.Add(m.Value);
           }
        m = m.NextMatch();
       }

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    你的意思是 - 你想测试一个 url 是否指向 stackoverflow.com 上的页面或其任何子域(例如 m.stackoverflow.com )?

    解析网址怎么样

    new Uri("http://stackoverflow.com/questions/14827755/regex-which-matches-any-subdomain").Host
    

    然后测试 Host 属性是否以 '.stackoverflow.com' 结尾或完全等于 'stackoverflow.com'。

    http://msdn.microsoft.com/en-us/library/system.uri.aspx

    【讨论】:

    • Colonel Panic,我想从字符串中提取所有匹配项 - 如果字符串是“http://stackoverflow.comaaaaakkkkhttp://moo.stackoverflow.comlll ggggghttp://www.something.stackoverflow.comggggg”我想提取“http://stackoverflow.com”“http://moo.stackoverflow.com”和“http://www.something.stackoverflow.com”并将它们添加到我的列表中。该字符串也可以包含回车符和换行符。我在(更新的)问题中发布的解决方案正是这样做的,但会导致巨大的性能问题。希望这能让它有点清楚
    • 另一个例子 - 如果我将此网页的源代码保存为字符串,我想提取每个有效的 URL(以 http 或 https 开头)并包含“stackoverflow.com”并将其保存到我的列表。请记住,“stackoverflow.com”只是一个示例,它可以是任何域名,例如“google.com”“moo.net”等。谢谢所有试图提供帮助的人
    【解决方案2】:

    这可能会让你开始做什么:

    https?://(www\.)?([^.]+)\.([^.]+.)+

    解释:

    https?://

    匹配 http 或 https。

    (www\.)?

    如果 www.存在,匹配它。

    ([^\s.]+)

    匹配网站名称(由一个或多个非点非空白字符组成)。

    (\.[^\s.]+)+

    匹配一个或多个域/子域(由一个点组成,然后是一个或多个非点非空白字符)。

    【讨论】:

    • 谢谢你,我会看看我能不能弄明白,一旦我弄明白了,我会回帖
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多