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++