4
std::cmatch res;
std::string str = "<h2>I'm a piece of text</h2>";
std::regex rx("<h(.)>([^<]+)");
std::regex_search(str.c_str(), res, rx);
std::cout << res[1] << ". " << res[2] << "\n";

この単純なコードは機能するはずですか?右?どうやらそうではありません:

terminate called after throwing an instance of 'std::regex_error'
  what():  regex_error
Aborted

コンパイラ(gcc 4.7.0)のバグですか、それとも何かが足りませんか?

4

1 に答える 1

3

正規表現の括弧が問題を引き起こしているようです。詳細と考えられる回避策については、この SO スレッドを参照してください。

また(同じスレッドから)、gcc バージョン 4.6.1 は の部分的なサポートしかstd::regexありませんでした。バージョン 4.7.0 でまだ修正されているかどうかはわかりません

于 2012-06-21T13:53:55.920 に答える