c – 使用boost :: regex获取sub-match_results
发布时间:2020-12-16 10:43:08 所属栏目:百科 来源:网络整理
导读:嘿,让我说我有这个正则表达式:(测试[0-9]) 而且我将它与:test1test2test3test0相匹配 const bool ret = boost::regex_search(input,what,r);for (size_t i = 0; i what.size(); ++i) cout i ':' string(what[i]) "n"; 现在,[1]将是test0(最后一次出现).让
嘿,让我说我有这个正则表达式:(测试[0-9])
而且我将它与:test1test2test3test0相匹配 const bool ret = boost::regex_search(input,what,r); for (size_t i = 0; i < what.size(); ++i) cout << i << ':' << string(what[i]) << "n"; 现在,[1]将是test0(最后一次出现).让我们说我需要得到test1,2和3:我该怎么办? 注意:真正的正则表达式非常复杂,并且必须保持一个整体匹配,因此将示例正则表达式更改为(test [0-9])将不起作用. 解决方法
我认为Dot Net能够制作单个捕获组集合,以便(grp)在group1上创建一个集合对象. boost引擎的regex_search()就像任何普通的匹配函数一样.你坐在while()循环中,匹配最后一个匹配的模式.您使用的表单不??使用bid-itterator,因此该函数不会启动最后一个匹配停止的下一个匹配项.
您可以使用itterator表单: #include <boost/regex.hpp> #include <string> #include <iostream> using namespace std; using namespace boost; int main() { string input = "test1,test2,test3,test0,"; boost::regex r("(test[0-9])(?:$|[,]+)"); boost::smatch what; std::string::const_iterator start = input.begin(); std::string::const_iterator end = input.end(); while (boost::regex_search(start,end,r)) { string stest(what[1].first,what[1].second); cout << stest << endl; // Update the beginning of the range to the character // following the whole match start = what[0].second; } // Alternate method using token iterator const int subs[] = {1}; // we just want to see group 1 boost::sregex_token_iterator i(input.begin(),input.end(),r,subs); boost::sregex_token_iterator j; while(i != j) { cout << *i++ << endl; } return 0; } 输出: TEST1TEST2TEST3TEST0 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |