奇怪的bug - std :: regex只匹配前两个字符串

时间:2012-03-19 02:30:05

标签: c++ regex linux c++11

今天我在申请中遇到了一些奇怪的错误。我已经测试了2个小时,但没有找到解决方案。也许你可以帮我解决这个问题。所以这就是:

#include <iostream>
#include <regex>
#include <vector>

int main()
{
        std::regex reg("rmvb|avi|rm|mp4|256");

        std::vector<std::string> ext{"rmvb", "avi", "rm", "mp4", "256", "null"};

        for (int i = 0; i < 6; i++)
        {
                std::cout << ext[i] << "\t" << std::boolalpha << std::regex_match(ext[i], reg) << std::endl;
        }

        return 0;
}

输出:

rmvb    true
avi true
rm  false
mp4 false
256 false
null    false

似乎在第二个元素之后丢弃了模式 - 无论我选择什么顺序(我试图交换它们,因为我认为数字会导致这个错误 - 但它们不是)。现在我不知道发生了什么。

我正在使用gcc版本4.6.3(Debian 4.6.3-1)。

1 个答案:

答案 0 :(得分:3)

regex库大多尚未在libstc ++中实现(参见status page)。这可能是一个错误,或者只是它没有实现的结果。我建议使用Boost.Regex作为替代。