0

このコードを実行すると:

#include <iostream>
#include <regex>

using namespace std;

main () {
    const string source = "hello(abc_def)";
    const regex regexp("he(l)lo.*");
    smatch m;
    if (regex_match(source, m, regexp)) {
        cout << "Found, group 1 = " << m[1].str() << endl;
    } else {
        cout << "Not found" << endl;
    }
    const regex regexp2("hello\\((\\w+)\\)");
    try {
        if (regex_match(source, m, regexp2)) {
            cout << "Found, group 1 = " << m[1].str() << endl;
        } else {
            cout << "Not found" << endl;
        }
    } catch(const exception& exc) {
        cout << "Got exception: " << exc.what() << endl;
    }
}

出力は次のとおりです。

Found, group 1 = el
terminate called after throwing an instance of 'std::regex_error'
   what():  regex_error

プログラムがクラッシュしているというダイアログ ボックスが表示されます。私は Windows 4.8.1 で g++ を使用しています (はい、指定-std=c++11しました)。正規表現は 4.9 までまだ実験的なものだったので、最初のキャプチャ グループが間違っている理由と、 2番目の正規表現の問題。std::regex_errorスローしていると言ったのに、コードがそれをキャッチしなかった理由についてはまだ心配しています。exception&節でtoregex_error&を変更してcatchも、動作は変わりませんでした。これらはすべて単なるライブラリのバグですか、それとも私が何か間違ったことをしたのでしょうか? 15 年ほど使用していなかった C++ を再学習しようとしています (C++11 も学習しようとしています)。

4

1 に答える 1

1

例外は次の行で発生します。

const regex regexp2("hello\\((\\w+)\\)");

そして、この行は「Try-catch」ブロック内にありません。

于 2013-10-25T18:15:21.227 に答える