C++11 正则表达式,非贪婪

标签 c++ regex c++11 non-greedy

我对 C++11 正则表达式有点问题,我认为它与贪婪有关。

这是一个小例子。

#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

关于C++11 正则表达式,非贪婪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40674154/

相关文章:

c++ - 那么 "this"的类型是什么?为什么 "this"不是左值?

C++: std::vector - "slice"一个 vector 是可能的吗?

C++ 和 Sqlite3 : How to store date/time with milliseconds precision

C++字符串压缩

c++ - 在 C++ 中使用 vector 与列表的图形表示

c++ - 从 GtkWidget 获取 X11 窗口句柄

java - 当字符串中只有一个数字发生变化时需要正则表达式方面的帮助

用于字母字符和空格的 Javascript 正则表达式?

javascript - 使用字符串替换将变量传递到正则表达式

C++ "error: no type named ‘type’ 在 ‘class std::result_of< ... >"