我有一段简单的 C++ 代码:
int main(void)
{
string text = "http://www.amazon.com";
string a,b,c,d,e,f;
pcrecpp::RE re("^((\\w+):\\/\\/\\/?)?((\\w+):?(\\w+)?@)?([^\\/\\?:]+):?(\\d+)?(\\/?[^\\?#;\\|]+)?([;\\|])?([^\\?#]+)?\\??([^#]+)?#?(\\w*)");
if(re.PartialMatch(text, &a,&b,&c,&d,&e,&f))
{
std::cout << "match: " << f << "\n";
// should print "www.amazon.com"
}else{
std::cout << "no match. \n";
}
return 0;
}
当我运行它时,它没有找到匹配项。 我很确定正则表达式模式是正确的,我的代码是错误的。 如果熟悉 pcrecpp 的人可以看看这个,我将不胜感激。
编辑:
感谢Dingo ,效果很好。
我遇到的另一个问题是结果排在第六位——“f”。
我编辑了上面的代码,因此您可以根据需要复制/粘贴。
最佳答案
问题是您的代码包含 ??(
,它是 C++ 中 [
的三字母组合。您需要禁用三字母组合或采取措施破坏它们像这样:
pcrecpp::RE re("^((\\w+):\\/\\/\\/?)?((\\w+):?(\\w+)?@)?([^\\/\\?:]+):?(\\d+)?(\\/?[^\\?#;\\|]+)?([;\\|])?([^\\?#]+)?\\??" "([^#]+)?#?(\\w*)");
关于c++ - PCRECPP(pcre)从url代码中提取主机名问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2360063/