4

我在使用标准正则表达式时遇到问题。我无法使问号量词起作用。对 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

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

4

3 回答 3

2

您的正则表达式代码很好。您正在使用的实现不是。它提供了一个标头,该标头声明了该库实施得不好的一堆东西。如果一个商业包这样做,它会受到严厉的批评,这是正确的。你得到你所付出的。

于 2013-04-13T14:59:59.990 回答
1

str::regex大部分没有在 gcc 中实现(在撰写本文时)。请参阅第 28 节: http: //gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011

于 2013-04-13T11:51:37.183 回答
1

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

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

获得扩展功能。

于 2013-04-13T12:06:01.873 回答