c++ STD正则表达式问号问题

c++ std regex question mark issue

本文关键字:问题 正则表达式 STD c++      更新时间:2023-10-16

我在使用std regex时有麻烦。我不能用问号量词。对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;
}

我使用以下命令进行编译:

g++ -std=c++11 main.cpp -o regex_test

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

您的正则表达式代码是好的。你正在使用的实现不是。它提供了一个头文件,声明了一堆库实现得不好的东西。如果一个商业软件包做到了这一点,它将受到严厉的批评,这是正确的。一分钱一分货

str::regex主要是在gcc中实现的而不是(在撰写本文时)。见第28节:http://gcc.gnu.org/onlinedocs/libstdc + +/手册/status.html # status.iso.2011

正则表达式的POSIX标准定义了两种类型,基本和扩展。的吗?算子是一个扩展特性。显然你用了

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