C++ c++;标准正则表达式问号问题

C++ c++;标准正则表达式问号问题,c++,regex,std,C++,Regex,Std,我的性病正则表达式有问题。我不能让问号量词工作。对regex_match的调用将始终返回0 我还尝试了{0,1},它的行为也与我预期的不一样:它的行为类似于+量词 这是我的密码: #include <iostream> #include <regex> using namespace std; int main(int argc, char **argv){ regex e1("ab?c"); cout << regex_match("ac

我的性病正则表达式有问题。我不能让问号量词工作。对regex_match的调用将始终返回0

我还尝试了{0,1},它的行为也与我预期的不一样:它的行为类似于+量词

这是我的密码:

#include <iostream>
#include <regex>
using namespace std;

int main(int argc, char **argv){

    regex e1("ab?c");
    cout << regex_match("ac", e1) << endl;    // expected : 1, output 0
    cout << regex_match("abc", e1) << endl;   // expected : 1, output 0
    cout << regex_match("abbc", e1) << endl;  // expected : 0, output 0

    regex e2("ab{0,1}c");
    cout << regex_match("ac", e2) << endl;    // expected : 1, output 0
    cout << regex_match("abc", e2) << endl;   // expected : 1, output 1
    cout << regex_match("abbc", e2) << endl;  // expected : 0, output 1

    return 0;
}

我做错什么了吗?或者为什么它不起作用?

str::regex
在编写本文时,大部分都是而不是在gcc中实现的。见第28节:
正则表达式的POSIX标准定义了两种类型,基本和扩展。这个运算符是一个扩展功能。显然你用

std::regex re2(".*(a|xayy)", std::regex::extended)

获取扩展功能。

您的正则表达式代码很好。您正在使用的实现不是。它提供了一个报头,声明了库实现不好的一系列内容。如果一个商业方案真的这样做了,它将受到严厉的批评,这是正确的。你花钱买什么就有什么。

据我所知,
std::regex
没有正确/完全实现。(但我不知道这里是这样还是其他情况。)我尝试了20多种变体,包括转义
、括号、使用
*
{x,y}
都以某种方式失败。我认为
是有缺陷的。是的,我听到过类似的声音,事实上可能就是这样。我已经切换到boost regex(这很有效),但我正在等待更多的答案,这很好。但是我在我的代码中测试了它,但它仍然不起作用(与以前的输出相同),这是一种方法,只是简单的
std::regex re2(“*(a | xayy)”)也可以工作。默认的正则表达式语法是ECMAScript,它直接支持
std::regex re2(".*(a|xayy)", std::regex::extended)