c++ - PCRECPP(pcre)从url代码中提取主机名问题

标签 c++ regex pcre

我有一段简单的 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/

相关文章:

java - 如何使我的文件读取/写入程序更快?

javascript - 想要对我的 RegEx(正则表达式)进行更多分类

c - 我该如何解决 munmap_chunk() : invalid pointer on regfree(&regex)

php - 所有格量词和一次性子模式之间的区别

c - PCRE - 偏移 vector ,3 的倍数?

c++ - 小 N 的 std::map 与 unordered_map 内存占用

c++ - 为什么 C++ 和 R 中的这些 RNG 不会产生相似的结果?

PHP 正确的正则表达式在带有 unicode 的 PHP 5.3.3-7 中不起作用

c++ - float 的二进制表示

c++ - 在软件中编码试用期