【发布时间】:2014-02-13 12:11:37
【问题描述】:
我刚刚开始学习如何使用regex 进行字符串处理(C++11 新功能)。如果下面的问题太傻,请见谅。
目前我应用以下代码来获取所有匹配项的索引:
string str = "aaabxxxaab";
regex rx("ab");
vector<int> index_matches; // results saved here (should be {2, 8})
int track = 0;
smatch sm;
while (regex_search(str, sm, rx))
{
index_matches.push_back(track+sm.position());
string tmp = sm.suffix().str();
track += str.length() - tmp.length(); // update base index
str = tmp;
}
它工作正常,但我必须每次手动更新track(基本索引)以使其正常工作。
同时,我注意到已经有smatch::size() 和smatch::position(),我想将它们结合起来使用以实现目标。以下是我想将它们组合在一起但无法工作的代码(即总是只得到{2})。
string str = "aaabxxxaab";
regex rx("ab");
vector<int> index_matches; // results saved here
// (should be {2, 8}, but always get only {2})
smatch sm;
regex_search(str, sm, rx);
for (int i=0; i<sm.size(); i++)
index_matches.push_back(sm.position(i));
谁能告诉我如何正确使用smatch::size() 和smatch::position() 来获取所有匹配的索引?
【问题讨论】: