【问题标题】:regex for URL including query stringURL 的正则表达式,包括查询字符串
【发布时间】:2011-01-21 12:56:51
【问题描述】:

我认为这将是一个简单的谷歌搜索,但显然不是。我可以在 C# 中使用什么正则表达式从较大的文本中解析出包含任何查询字符串的 URL ?我花了很多时间,发现了很多不包含查询字符串的例子。而且我不能使用 System.URI,因为它假定您已经有了 URL……我需要在周围的文本中找到它。

【问题讨论】:

  • 规则是什么?它们会被正确编码,还是字符串中可能有空格?如果它们将被正确编码,那么您之前应该可以使用的任何模式,如果您添加只需将非空白字符的搜索附加到它的末尾。

标签: c# .net regex url


【解决方案1】:

我想出了以下内容:

带有协议的网址

^(https?|ftp|file)\:\/\/([a-zA-Z0-9]+[a-zA-Z0-9\-_])+(\.([a-zA-Z0-9]+[a-zA-Z0-9\-_])+)+(\/(?!\/)[a-zA-Z0-9\-_\.]*)*(\??)[a-zA-Z0-9_\-\.~=%]*$

没有协议的网址

^([a-zA-Z0-9]+[a-zA-Z0-9\-_])+(\.([a-zA-Z0-9]+[a-zA-Z0-9\-_])+)+(\/(?!\/)[a-zA-Z0-9\-_\.]*)*(\??)[a-zA-Z0-9_\-\.~=%]*$

【讨论】:

    【解决方案2】:

    这应该可以得到任何东西(随意添加其他协议):

    @"(https?|ftp|file)\://[A-Za-z0-9\.\-]+(/[A-Za-z0-9\?\&\=;\+!'\(\)\*\-\._~%]*)*"
    

    真正的困难是找到终点。照原样,此模式依赖于查找无效字符。这将是域名末尾之前的字母、数字、连字符或句点以外的任何内容,或者除了加上正斜杠 (/)、问号 (?)、和号 (&)、等号 (=) 之外的任何内容,分号 (;)、加号 (+)、感叹号 (!)、撇号/单引号 (')、左/右括号、星号 (*)、下划线 (_)、波浪号 (~) 或百分号 (% ) 在域名之后。

    请注意,这将允许无效的 URL,例如

    http://../
    

    它会在一个 URL 之后拾取一些东西,比如在这个字符串中:

    也许你应该试试http://www.google.com

    "http://www.google.com."(带有尾随句点)将匹配的位置。

    它还会丢失不以协议规范开头的 URL(特别是第一组括号中的协议。例如,它会丢失此字符串中的 URL:

    也许你应该试试 www.google.com。

    如果没有更明确的界限,很难得到每个案例。

    【讨论】:

    【解决方案3】:

    抱歉,我还不能添加 cmets,但想指出 P Daddy 的回答需要稍作调整:

    @"(https?|ftp|file)\://[a-zA-Z0-9\.\-]+(/[a-zA-Z0-9\?\&\=;\+!'\(\)\*\-\._~%]*)*"
    

    【讨论】:

    • 我找不到任何不同之处,只是您颠倒了大小写字符的顺序(无操作),并且这样做,修复了我在 @ 987654322@(小写“a”到大写Z)。下次,只需指出错字会更简单。我会解决的。
    【解决方案4】:

    使用 RFC3986 结尾处的 ABNF 作为正确的起点。

    这将它们用于 Python 中的 URI 验证;不是你要找的东西,但它应该让你知道你应该走的方向: http://gist.github.com/138549

    【讨论】:

      【解决方案5】:

      RegexLib 有很多有用的东西...

      http://regexlib.com/Search.aspx?k=querystring

      【讨论】:

        【解决方案6】:

        查看这个人的 QueryString 构建器类 -

        http://weblogs.asp.net/bradvincent/archive/2008/10/27/helper-class-querystring-builder-chainable.aspx

        Microsoft 也有一个 UriBuilder 可能会对您有所帮助 -

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

        【讨论】:

        • 这些看起来很适合构建查询字符串,但 JoelFan 想要识别 URL,而不是构建它们。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 2021-11-24
        • 2014-07-20
        • 1970-01-01
        相关资源
        最近更新 更多