У меня есть небольшая проблема с 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}
Я ожидал бы результата, который я получу, если я сделаю это жадным, но не с? после. +.
Должно ли это сделать его не жадным, верно?
Так в чем проблема моей идеи?
Спасибо за помощь!
Крис
Вы должны удалить std::regex::extended
, это делает ваше регулярное выражение POSIX ERE совместимый, и что регулярное выражение не поддерживает ленивые квантификаторы.
std::regex rx1("(\\{.+?})(.*)");
Увидеть C ++ demo
Других решений пока нет …