1
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”?

4

1 回答 1

1

文档中所述:

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);

于 2012-12-10T03:12:05.420 回答