Boost regexp - нулевое завершение результатов поиска - PullRequest
0 голосов
/ 26 января 2010
  boost::regex re;
  re = "(\\d+)";
  boost::cmatch matches;
  if (boost::regex_search("hello 123 world", matches, re))
    {
    printf("Found %s\n", matches[1]); 
    }

Результат: "Найдено 123 мира". Я просто хотел "123". Это какая-то проблема с нулевым завершением или просто неправильное понимание того, как работает regex_search?

1 Ответ

2 голосов
/ 26 января 2010

Вы не можете передать matches[1] (объект типа sub_match<T>) в printf таким образом. Тот факт, что он дает любой полезный результат, - это то, на что вы не можете рассчитывать, так как printf ожидает указатель на символ. Вместо этого используйте:

cout << "Found " << matches[1] << endl;

Или, если вы хотите использовать printf:

printf("Found %s\n", matches[1].str().c_str());

Вы можете получить объект std :: string с результатом, используя matches[1].str().

...