このコードを実行すると:
#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 も学習しようとしています)。