Непонимание регулярных выражений или просто неработающая реализация? - PullRequest
1 голос
/ 08 октября 2011

Я попробовал очень простое использование regex_search и не могу понять, почему я не получаю совпадение:

Увы, gcc-C ++ 0x-реализация 4.5, похоже, не работает,Я получаю сообщение об ошибке здесь .

Но вот моя попытка gcc-4.7.0, довольно просто:

#include <iostream>
#include <string>
#include <regex>
using namespace std;
int main () {
    regex rxWorld("world");
    const string text = "hello world!";
    const auto t0 = text.cbegin();
    smatch match;
    const bool ok = regex_search(text, match, rxWorld);
    /* ... */
}

Я думаю, я должен получить ok==true и что-то в match.Я сократил пример до очень простого выражения для этого.Сначала я попробовал немного сложнее.

Но при печати кода на /* ... */ говорится иначе:

  cout << "  text:'" << text
       << "' ok:" << ok
       << " size:" << match.size();
  cout << " pos:" << match.position()
       << " len:"<< match.length();
  for(const auto& sub : match) {
      cout << " ["<<(sub.first-t0)<<".."<<(sub.second-t0)
           << ":"<<sub.matched
           << "'"<<sub.str()
           << "']";
  }
  cout << endl;

Вывод:

$ ./regex-search-01.x
text:'hello world!' ok:0 size:0 pos:-1 len:0

ОбновлениеЯ также пытался regex_search(t0, text.cend(), match, rxWorld) и const char* text, без изменений. `

Неужели мое понимание regex_search неверно? Я совершенно сбит с толку.Или это просто gcc?

1 Ответ

3 голосов
/ 09 октября 2011

Как вы можете видеть из C ++ - 0x состояния libstdc ++ , поддержка регулярных выражений неполна.В частности match_results не закончены.Итераторы даже не запускаются.

Добровольцы приветствуются; -)

[EDIT] [Начиная с gcc-4.9] 2 будут полностью поддерживаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...