C ++从regex_iterator获取匹配项

时间:2013-05-23 18:14:07

标签: c++ regex class object iterator

我试图通过逐行读取来从文件中获取一些匹配项。我的代码是这样的:

std::regex e("id=\"(.+?)\"|title=\"(.+?)\"|summary=\"(.+?)\"|first=\"(.+?)\"|last=\"(.+?)\"");
std::regex_iterator<std::string::iterator> rit ( line.begin(), line.end(), e );
std::regex_iterator<std::string::iterator> rend;

while (rit!=rend) {
    std::cout << rit->str() << std::endl;
    ++rit;
}

我尝试过使用regex_search和smatch对象,但它在该行的第一个匹配项中停止。我发现regex_iterator完成了这项工作,但它给了我整个匹配(例如id =“123456”,而不是123456)这是有道理的,但我只需要这个数字。

根据http://www.cplusplus.com/reference/regex/regex_iterator/operator * /解引用迭代器会给我一个match_results对象,但我不知道如何声明一个(它总是给我错误的参数列表。我怎么能得到迭代器给我一个smatch对象?

2 个答案:

答案 0 :(得分:3)

str()对象上调用match_results会返回整个当前匹配项。要查看单个子匹配,请在调用中传递索引:

for (int i = 0; i < rit->size(); ++i)
    std::cout << rit->str(i) << '\n';

答案 1 :(得分:0)

您可能需要遍历匹配项,每次都调用regex_match以获取每次更新的match_results对象。