Regex C ++ corresponde ao conteúdo entre chaves [duplicado]
Esta pergunta já tem uma resposta aqui:
O gcc 4.8 ou anterior é um buggy sobre expressões regulares? 3 respostas Suponha que eu gostaria de extrair o conteúdo de chaves combinadas usando regex C ++ 11. Então, por exemplo,{foo}
corresponderia com sucesso e eu poderia usar omatch_result
para extrair o conteúdo. Parece simples, mas o código a seguir não faz exatamente o que eu desejo
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
Agora não deveriam[1]
retornar apenasfoo
sem o aparelho, pois é o primeiro grupo de captura?
EDITAR Uma informação essencial para esta pergunta é que o compilador que estou usando é o GCC 4.6.3 (que atualmente é a versão mais recente do repositório no Ubuntu 12.04 LTS). A resposta identifica com precisão o quão ruim é o suporte para regex no GCC.