我是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来查看此示例。
答案 0 :(得分:1)
由于反斜杠(\)是C(& C ++)字符串常量中的转义字符,因此需要将其转义。
即替换\的所有实例与\\
LOL。我对这篇文章有同样的问题!所有的反斜杠都消失了,因为我忘了逃避它们。
选中此page以查看Boost中可用的不同正则表达式类型。它有一个JavaScript类型,它只是映射到normal,这意味着默认值与JavaScript regexes兼容。