【问题标题】:Pcrepp - Perl Regular Expression syntax to match host name [duplicate]Pcrepp - 匹配主机名的 Perl 正则表达式语法 [重复]
【发布时间】:2010-03-01 21:38:32
【问题描述】:

可能重复:
The Hostname Regex

我正在尝试使用 pcrepp (PCRE) 从 url 中提取主机名。 pcre 正则表达式与 Perl 5 正则表达式相同。

例如:

url = "http://www.pandora.com/#/volume/73";
// the match will be "http://www.pandora.com/".

我找不到此示例的正则表达式的正确语法。

  • 需要为任何 url 工作:amazon.com/sds/ 应该返回:amazon.com。 或abebooks.co.uk/isbn="62345627457245"/blabla/ 应该返回abebooks.co.uk
  • 我不需要检查 url 是否有效。只是为了获取主机名。

【问题讨论】:

标签: c++ regex perl parsing pcre


【解决方案1】:

类似这样的:

^(?:[a-z]+://)?[^/]+/?

【讨论】:

  • 如果我有 "amazon.com/abc" 怎么办?我不能只对那种地址使用斜线。
  • 如果没有协议,则查找第一个斜杠。对于正则表达式,这是^([a-z]+://)?[^/]+/。您可能应该在问题中提及此细节,而不是将其隐藏在对答案的评论中。这是一个非常重要的细节。
【解决方案2】:

参见Regexp::Common::URI::http,它使用Regexp::Common::URI::RFC2396 中定义的子模式。检查这些模块的源代码应该可以让您很好地了解如何组合出一个体面的模式。

【讨论】:

    【解决方案3】:

    这是一种可能性:

    ^[a-zA-Z0-9\-\.]+\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU)$
    

    还有一个:

    ^http\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$
    

    这些和其他与 URL 相关的正则表达式可以在这里找到:Regular Expression Library

    【讨论】:

      【解决方案4】:
      string regex1, regex2, finalRegex; 
      regex1 = "^((\\w+):\\/\\/\\/?)?((\\w+):?(\\w+)?@)?([^\\/\\?:]+):?(\\d+)?(\\/?[^\\?#;\\|]+)?([;\\|])?([^\\?#]+)?\\??";
      
      regex2 = "([^#]+)?#?(\\w*)";
      
          //concatenation
          finalRegex= regex1+regex2;
      

      结果将排在第六位。 在我问的另一个问题中回答:Details

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-10
        • 1970-01-01
        • 2020-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多