C++11 正規表現を使用して、一致する中括弧の内容を抽出したいとします。たとえば、{foo}
は正常に一致し、 を使用しmatch_result
てコンテンツを抽出できます。単純に思えますが、次のコードは私が望んでいることをまったく実行しません
std::string foo("{foo}");
std::regex r("\\{(.*)\\}");
std::smatch m;
bool result = regex_match(foo, m, r); // result returns true
cout << m[0] << endl; // prints: {foo}
cout << m[1] << endl; // prints: {foo} instead of just foo as I would expect
最初のキャプチャ グループであることを考えると、中かっこなしでm[1]
返すべきではありませんか?foo
編集:この質問の重要な情報は、私が使用しているコンパイラが GCC 4.6.3 (現在、Ubuntu 12.04 LTS の最新のリポジトリ バージョン) であることです。その答えは、GCC での正規表現のサポートがいかに貧弱であるかを正確に示しています。