C ++ regex pasuje do treści w nawiasach klamrowych [duplikat]

To pytanie ma już odpowiedź tutaj:

Czy gcc 4.8 lub wcześniejsza wersja zawiera błędy w wyrażeniach regularnych? 3 odpowiedzi

Załóżmy, że chciałbym wyodrębnić zawartość pasujących nawiasów klamrowych przy użyciu wyrażenia regularnego C ++ 11. Na przykład{foo} pasuje pomyślnie i mógłbym użyćmatch_result, aby wyodrębnić zawartość. Wydaje się to proste, ale poniższy kod nie robi dokładnie tego, co chciałbym

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

Teraz nie powinnom[1] wróć tylkofoo bez nawiasów klamrowych, ponieważ jest to pierwsza grupa przechwytywania?

EDYTOWAĆ Istotną informacją dla tego pytania jest to, że kompilatorem, którego używam, jest GCC 4.6.3 (która jest obecnie najnowszą wersją repozytorium w Ubuntu 12.04 LTS). Odpowiedź dokładnie określa, jak słaba jest obsługa wyrażenia regularnego w GCC.

questionAnswers(1)

yourAnswerToTheQuestion