c – 使用boost :: regex获取sub-match_results

c – 使用boost :: regex获取sub-match_results,第1张

概述嘿,让我说我有这个正则表达式:(测试[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"; 嘿,让我说我有这个正则表达式:(测试[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

总结

以上是内存溢出为你收集整理的c – 使用boost :: regex获取sub-match_results全部内容,希望文章能够帮你解决c – 使用boost :: regex获取sub-match_results所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1222364.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存