Boost Regex查找主机名/域名

时间:2010-02-27 01:48:23

标签: javascript c++ regex boost

我是c ++和boost的新手。 我正在尝试获取给定网址的主机名:

这就是我现在所拥有的:

int main()
{
  string url = "http://www.amazon.com/gp/product/blabla";

 //Regular Expression from Javascript.
  boost::regex ex("/^((\w+):\/\/\/?)?((\w+):?(\w+)?@)?([^\/\?:]+):?(\d+)?(\/?[^\?#;\|]+)?([;\|])?([^\?#]+)?\??([^#]+)?#?(\w*)/");

  boost::regex_search(url, ex);
  // I want it to get "http://www.amazon.com/".
}

我得到了很多错误:“无法识别的字符转义序列” 我从Javascript中获取了这个正则表达式。我不确定我能做到这一点。

除了Perl之外,我在'Boost.regex'中可以使用的正则表达式类型是什么? 有没有什么样的正则表达式转换器? (因为我正在将大量的代码从Javascript转换为c ++,而且我还有更多的正则表达式。)

顺便说一句,这是我在Javascript中的功能:

parseHostname: function(url)
 {
    m = /^((\w+):\/\/\/?)?((\w+):?(\w+)?@)?([^\/\?:]+):?(\d+)?(\/?[^\?#;\|]+)?([;\|])?([^\?#]+)?\??([^#]+)?#?(\w*)/.exec(url) || [];
    return m[6];
},

要使用PCRE和完整代码link来查看此示例。

1 个答案:

答案 0 :(得分:1)

由于反斜杠(\)是C(& C ++)字符串常量中的转义字符,因此需要将其转义。

即替换\的所有实例与\\

LOL。我对这篇文章有同样的问题!所有的反斜杠都消失了,因为我忘了逃避它们。

选中此page以查看Boost中可用的不同正则表达式类型。它有一个JavaScript类型,它只是映射到normal,这意味着默认值与JavaScript regexes兼容。