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}

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

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

Крис

3

Решение

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

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

Увидеть C ++ demo

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]