boost::regex re("(abc)(.*?)");
boost::smatch m;
std::string str = "abcdlogin";
boost::regex_search(str, m, re);
我发现 m[1].first 是“abcdlogin”,m[1].second 是“dlogin”。
但我认为 m[1].first 应该是“abc”?
boost::regex re("(abc)(.*?)");
boost::smatch m;
std::string str = "abcdlogin";
boost::regex_search(str, m, re);
我发现 m[1].first 是“abcdlogin”,m[1].second 是“dlogin”。
但我认为 m[1].first 应该是“abc”?
如文档中所述:
m[n] .first :对于所有整数 n < m.size(),匹配子表达式 n 的序列的开始。或者,如果子表达式 n 没有参与匹配,那么最后一个。
m[n].second:对于所有整数 n < m.size(),匹配子表达式 n 的序列的结尾。或者,如果子表达式 n 没有参与匹配,那么最后一个。
注意它们是如何成为匹配子表达式的迭代器。在您的示例中,如果您想要一个带有 的字符串"abc"
,您可以像这样构造一个字符串std::string s(m[1].first, m[1].second);
: