c++ - 奇怪的错误 - std::regex 只匹配前两个字符串

标签 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)。

最佳答案

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

关于c++ - 奇怪的错误 - std::regex 只匹配前两个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29213614/

相关文章:

c++ - "auto;"类型推断

C++以两种不同的方式从类中实例化一个对象

c++ - Qt 删除 QVBoxLayout 上的小部件之间的空白区域

python - 正则表达式两组匹配所有内容直到模式

linux - 将文件名参数从 Bash 传递到 Perl

c++ - 如何在 VC++6 中编写一个 const_iterator?

HTML数据提取

javascript - JQuery 验证 - 模式规则不起作用,并且还导致其他规则不起作用

MySQL 服务器最大化内存,Galera 集群

regex - 如何用sed替换文件中具有特定模式的单词?