Pcrepp - 用于匹配主机名的Perl Regular Expression语法

时间:2010-03-01 21:38:33

标签: c++ regex perl parsing pcre

  

可能重复:
  The Hostname Regex

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

例如:

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

在这个例子中,我找不到正则表达式的正确语法。

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

4 个答案:

答案 0 :(得分:2)

这样的事情:

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

答案 1 :(得分:2)

请参阅使用Regexp::Common::URI::http中定义的子模式的Regexp::Common::URI::RFC2396。检查这些模块的源代码应该会让你知道如何组合一个体面的模式。

答案 2 :(得分:1)

这是一种可能性:

^[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

答案 3 :(得分:1)

string regex1, regex2, finalRegex; 
regex1 = "^((\\w+):\\/\\/\\/?)?((\\w+):?(\\w+)?@)?([^\\/\\?:]+):?(\\d+)?(\\/?[^\\?#;\\|]+)?([;\\|])?([^\\?#]+)?\\??";

regex2 = "([^#]+)?#?(\\w*)";

    //concatenation
    finalRegex= regex1+regex2;

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