c ++ std regex问号问题

时间:2013-04-13 11:27:38

标签: c++ regex std

我正在使用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

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

3 个答案:

答案 0 :(得分:2)

您的正则表达式代码没问题。您正在使用的实现不是。它提供了一个标头,用于声明库实现严重的一堆内容。如果一个商业套餐这样做会受到严厉的批评,这是正确的。你得到你付出的代价。

答案 1 :(得分:1)

str::regex在gcc中实施(在撰写本文时)。见第28节: http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011

答案 2 :(得分:1)

正则表达式的POSIX标准定义了两种类型,基本类型和扩展类型。的? operator是一个扩展功能。显然你使用

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

获取扩展功能。