而且我将它与: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
总结以上是内存溢出为你收集整理的c – 使用boost :: regex获取sub-match_results全部内容,希望文章能够帮你解决c – 使用boost :: regex获取sub-match_results所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)