当前位置: 首页 > 面试题库 >

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

黎征
2023-03-14
问题内容

今天,我在应用程序中遇到了奇怪的错误。我已经测试了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++中实现(请参见状态页)。这可能是错误,也可能是未实现的结果。我建议使用Boost.Regex作为替代。



 类似资料:
  • 问题内容: 仅当字符串中的字符没有转义时(即以另一个字符的奇数开头),如何才能找到它并对其进行操作? 例: 所需字符: 转义字符: 应该找到(并对其进行操作(例如拆分)) 应该 不会 应该 应该 不会 问题答案: 在后面使用负数a定义边界: 在这里观看现场演示 照顾Java中的反斜杠,正则表达式上方将是:

  • 问题内容: 我正在使用此代码: 但是在编译时出现此错误: 然后是堆栈跟踪的编译器错误。 我将在课堂开始时同时进行这两种导入: 有什么事吗 在Netbeans中,我看到自动完成选项并且Locale对象没有语法错误… 问题答案: 您的设置有些麻烦,下面的程序对我来说很好用。 它要求源代码的事实使我相信它正在尝试以某种调试模式进行编译或运行。您不需要编译java.util。*的源代码,这很奇怪。 看看我

  • 我尝试了这种模式,但发现第一个匹配的句子带有符号

  • 我的问题是:这是一个bug还是我遗漏了什么? 事实上,不同的匹配器以不同的格式返回消息是一个很大的问题,因为我试图编写一些自定义的验证框架,该框架使用匹配器,并且能够在出现任何错误时返回良好的人类可读的消息。我似乎不能为此目的使用方法...

  • 我正在尝试编写一个模式,该模式将只匹配按字面解释的字符串的第一个字符(可以是任何字符,也可以是空白)。 给定这个函数,它使用“非常没有魔力”来匹配作为参数给出的字符串,然后高亮显示该字符串,我如何修改它,使它只高亮显示第一个字符? 例如,在下面的文本中调用,只会在后面跟着,而不是在任何其他地方突出显示。目前,它突出显示整个给定字符串。 Lorem ipsum do{^(lor sit amet,

  • 我对正则表达式是新手。 以下是我到目前为止在C#中所做的工作 显然,这并不违反所有指定的规则。有人能给点提示吗?