C ++ 11 RegEx,非贪婪

chr*_*s01 5 c++ regex non-greedy c++11

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;
}
Run Code Online (Sandbox Code Playgroud)

我希望

{ab} 
Run Code Online (Sandbox Code Playgroud)

用于输出。但是我得到了

{ab}{cd}[ef]{gh}
Run Code Online (Sandbox Code Playgroud)

我希望得到的结果是贪婪的,而不是?在。+之后。应该让它不贪心吧?

那么我的想法出了什么问题?感谢帮助!

克里斯

Wik*_*żew 5

您需要删除std::regex::extended,它使您的正则表达式POSIX ERE兼容,并且该正则表达式风格不支持惰性量词。

std::regex rx1("(\\{.+?})(.*)"); 
Run Code Online (Sandbox Code Playgroud)

参见C++ 演示