std :: regex_replace не принимает менее 6 аргументов

0

Я пытаюсь узнать, как использовать библиотеку regex в С++ 11. На ubuntu 13.10 Я пытаюсь скомпилировать следующий пример cplusplus.com:

// regex_replace example
#include <iostream>
#include <string>
#include <regex>
#include <iterator>

int main ()
{
  std::string s ("there is a subsequence in the string\n");
  std::regex e ("\\b(sub)([^ ]*)");   // matches words beginning by "sub"

  // using string/c-string (3) version:
  std::cout << std::regex_replace (s,e,"sub-$2");

  // using range/c-string (6) version:
  std::string result;
  std::regex_replace (std::back_inserter(result), s.begin(), s.end(), e, "$2");
  std::cout << result;

  // with flags:
  std::cout << std::regex_replace (s,e,"$1 and $2",std::regex_constants::format_no_copy);
  std::cout << std::endl;

  return 0;
}

С помощью команды:

$ g++ -std=c++11 -o file file.cc

Я получаю следующий вывод:

file.cc:13:48: error: no matching function for call to ‘regex_replace(std::string&, std::regex&, const char [7])

Что я делаю не так?! На моей голове не осталось много волос... Спасибо заранее

  • 1
    Какую версию gcc и libstdc ++ вы используете?
  • 1
    Работает с clang ++ / libc ++ coliru.stacked-crooked.com/a/e52aacb4bb121c9c
Показать ещё 4 комментария
Теги:
c++11
std

1 ответ

4
Лучший ответ

Вам необходимо обновить компилятор от GCC 4.8 до GCC 4.9.

К сожалению, GCC 4.9 еще не выпущен, но он достаточно стабилен, чтобы идти с сборкой соединительных линий, если вам нужна эта функциональность в ближайшее время.

В качестве альтернативы, дайте Clang или Boost.Regex a go.

  • 0
    boost.regex также может быть жизнеспособной альтернативой
  • 0
    @ Кубби: это правда.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню