我有这段代码:
std::smatch m;
std::string dataType = "type = struct A {\nint a;\nint b;\nint c; }";
std::regex_search(dataType, m, std::regex("(= )(.*)( [{]|\n|$)"));
std::cout << m.str(2) << std::endl;
问题是它返回最长的匹配,但我需要最小的匹配。 输出是:
struct A {\n int a;\n int b;\n int c; }
但它必须是:
struct A
如何获得我想要的结果?
答案 0 :(得分:2)
答案 1 :(得分:0)
获得&#34; struct A&#34;从您的文本中,要使用的正则表达式是:
\=\s(\w+\s\w+)
如果您有其他情况,请提供更多规格或输入示例以及输出结果。
修改强> 感谢user3259253,正确的解决方案是:
\\=\\s(\\w+(\\s\\w+)?)
答案 2 :(得分:0)
是的,请使用:
std::regex_search(dataType, m, std::regex("(= )(.*)([\\{]|\\n)$"));
但是,如果您只想捕捉 = 符号和大括号/行尾之间的内容,那么您就不需要这么多() 组。这就够了:
std::regex_search(dataType, m, std::regex("= (.*)[\\{]|\\n$"));
std::cout << m.str(1) << std::endl;
请注意,我们在此处将文本作为第一个条目 m.str(1)而不是第二个条目,因为我们已经删除了&#34;( =)&#34;