3
C++ 11 RegExに少し問題があります。私はgreedynesについて考えています。C++ 11 RegEx、non-greedy
ここは少しサンプルです。
#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
を削除する必要がクリス
は、なぜあなたはしかし、あなたは右中括弧をエスケープしていない '\\ {'で開く中括弧をエスケープしますか? – Bobulous
@Bobulousこれは前のパターンを繰り返すのを助ける正規表現の特殊文字です。 –
'std :: regex :: extended'を使用しないでください。regex POSIX EREに準拠し、遅延量指定子をサポートしません。 –