C++11 RegEx, не жадный

У меня есть небольшая проблема с C++11 RegEx, и я думаю, что это о жадности.

Вот маленький образец.

#include <stdio.h>
#include <string>
#include <regex>

int main (void)
{
  std::string in="{ab}{cd}[ef]{gh}[ij][kl]";  // the input-string

  std::regex rx1 ("(\\{.+?})(.*)", std::regex::extended);       // non-greedy?
  std::smatch match;

  if (regex_match (in, match, rx1))
  {
    printf ("\n%s\n", match.str(1).c_str());
  }

  return 0;
}

Я бы ожидал

{ab} 

для вывода. Но я получил

{ab}{cd}[ef]{gh}

Я ожидал бы результата, который я получу, если я сделаю это жадным, но не с? после. +. Должно ли это сделать его не жадным, верно?

Так в чем проблема моей идеи? Спасибо за помощь!

Крис

1 ответ

Решение

Вы должны удалить std::regex::extended, это делает ваш regex POSIX ERE совместимым, и этот вариант regex не поддерживает ленивые квантификаторы.

std::regex rx1("(\\{.+?})(.*)"); 

Посмотрите демонстрацию C++

Другие вопросы по тегам