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

正規表現の POSIX 標準では、基本型と拡張型の 2 つの型が定義されています。? operator は拡張機能です。どうやらあなたが使っている

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

拡張機能を取得します。

于 2013-04-13T12:06:01.873 に答える
1

str::regexgcc ではほとんど実装されていません(執筆時点)。セクション 28 を参照してください: http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011

于 2013-04-13T11:51:37.183 に答える