2 wulinbang wulinbang 于 2016.02.02 12:05 提问

boost reg match的问题,很奇怪,不知道怎么弄 40C

//CListboost::smatch,boost::smatch& Q_Regex::QRegexList(std::string htmlcode,CString RegStr)
//{ //提取子串
// boost::smatch mat;
// boost::regex reg(RegStr);
// bool r=boost::regex_match(htmlcode, mat, reg);
// CListboost::match_results<std::string::const_iterator,boost::match_resultsstd::string::const_iterator&> clist;
// if(r) //如果匹配成功
// {
// //显示所有子串
//
// for (int i = 0; i < mat.size(); i ++)
// clist.AddTail(mat[i]);
// }
//
//

// return clist;
//

//}

clist.AddTail(mat[i]);这里提示类型不对,不知道mat怎么转sub_match,或者用其他什么方法

1个回答

oyljerry
oyljerry   Ds   Rxr 2016.02.02 13:43

用sregex_token_iterator

 #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, what, 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;
}
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
js 中的window.location.search.match()页面间的传阐述
通常我们2个界面的切换传值会通过html的链接传参数。 测试abcd.html?name=xyz应该弹出xyz 当我们在跳转后的界面拿到值的时候。就需要读取参数,这个时候我可以根据正则表达式去读取。 function getQueryString(name) { var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i'
获取url参数window.location.search.substr(1).match(reg)
getUrlParam:function(name){   var reg=new new RegExp('(^|&)'+name+'=([^&]*)(&|$)');   var result=window.location.search.substr(1).match(reg);   return result?decodeURIComponent(result[2]:null },
升级到Ubuntu 14.04后的中文输入问题
升级后ibus拼音输入很奇怪不知道怎么
石油大oj 1825奇怪的电梯 bfs
链接:http://exam.upc.edu.cn/problem.php?id=1825 题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第i层楼(1 输入 输入共有二行,第一行为三个用空格隔开的正整数,表示N,A,B(1≤N≤200, 1≤A,B≤N),第二行为N个用空格隔开的正整数,表示Ki。 输出 输出仅一行,即最少按键次
滑雪(动态规划)
Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子  1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11
intellij idea 的一些奇怪现象
intellij idea 的一些奇怪现象
pku 1088滑雪
Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可
boost regex 详解
boost::regex的默认正则表达式语法是perl语法         boost::regex支持perl regular表达式、POSIX-Extended regular表达式和POSIX-Basic Regular表达式,但默认的表达式语法是perl语法,如果要使用
window.location.search.substr(1)方法
window.location window的location对象 search 得到的是url中?部分 substr() 返回一个从指定位置开始的指定长度的子字符串 这里设置为1,是为了把url中的?号去掉
Boost正则表达式库regex常用search和match示例
示例很简单,但是很有针对性,可以根据示例进行不用的修改,之后加入到各种工程中。 #include #include #include #include #include using namespace std; using namespace boost; regex subexp("e[cl][oe][mc]"); regex expression("^se