2

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

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 对象?

4

2 回答 2

3

Calling str() on a match_results object returns the entire current match. To see individual submatches, pass an index in the call:

for (int i = 0; i < rit->size(); ++i)
    std::cout << rit->str(i) << '\n';
于 2013-05-23T19:01:56.613 回答
0

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

于 2013-05-23T18:56:33.623 回答