Ich habe ein kleines Problem mit einem C++ 11 RegEx und ich denke, es geht um greedigenes.C++ 11 RegEx, nicht-gierig
Hier ist ein kleines Beispiel.
#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;
}
würde ich
{ab}
für die Ausgabe erwarten. Aber ich habe
{ab}{cd}[ef]{gh}
ich das Ergebnis erwarten würde ich, wenn ich es gierig tun, aber nicht mit dem? nach dem. +. Sollte es nicht gierig machen, oder?
Also, was ist das Problem in meiner Idee? Danke für Hilfe!
Chris
Warum Sie die öffnende geschweifte Klammer nicht entkommen mit '\\ {', aber Sie nicht die schließende geschweifte Klammer entkommen? – Bobulous
@Bobulous das ist ein Regex spezielle char, die hilft, das vorherige Muster zu wiederholen .. –
Ich denke, Sie sollten nicht verwenden, std :: regex :: extended, es macht Ihre Regex POSIX ERE-konform, die nicht unterstützt Lazy Quantoren. –