已经无奈了
谁来帮我把这个搞定……跪求……(T_T)regex exp1("(?<=<LogT>).*(?=</LogT>)");
regex exp2("(?<=<LogTime>).*(?=</LogTime>)");
regex exp3("(?<=<LogM>).*(?=</LogM>)");

std::string in;
cmatch what;
in1 =     "<LogT>123</LogT><LogTime>456</LogTime><LogM>789</LogM>";
in2 = "X<LogT>123</LogT><LogTime>456</LogTime><LogM>789</LogM>";

if(regex_search(in1.c_str(), what, exp1))
{
int k = what.size();
for(int i=0;i<k;i++)
cout<<"str :"<<what[i].str()<<endl;
}vc2005,boost库1.39
我想最后提出123,456和789三个字符串,现在已经可以分步提出来了
但是没法合成一个表达式做,而且我看了文档和案例,仍然不明白该怎么把LogT/LogTime和LogM这三个标签给提出来,存到哪儿……
求助啊!

解决方案 »

  1.   

    我明白了,你这么着做就成regex exp1("<LogT>(\d+)\s*</LogT>\s*<LogTime>(\d+)\s*</LogTime>\s*<LogM>(\d+)\s*</LogM>"); 
    这个时候求子表达式就能得到结果了...如果不知道子表达式的取值方法,我帮你查一下
      

  2.   

    谢谢,
    不过这个式子的话,应该是匹配整个句子的吧?我看有反向字符做分组的例子\1这样的,但这个具体该怎么用呢?
    还有就是我想问问what里面的匹配出来的regex_search的值应该怎么查,子表达式的值又该怎么查
      

  3.   

    http://www.cppprog.com/2009/0116/53_3.html原来boost里是用迭代器找寻子串的...可以把match_results看成是一个sub_match的容器,同时它还提供了format方法来代替regex_format函数。
    一个sub_match就是一个子串,这个迭代器pair里的first和second分别指向了这个子串开始和结尾所在位置。
    同时,sub_match又提供了str(),length()方法来返回整个子串。http://hi.baidu.com/cdutboy/blog/item/b449088a986f03769f2fb468.html
      

  4.   


    (<LogT>)\d+\1(<logX>)\d+\2 这样是\1的意思 就是匹配子表达式的意思...
      

  5.   

    sub_match 就是匹配小括号里面的内容,比如我刚才的式子 匹配了整个的东西,但是每一个子表式,也就是小括号里面的内容需要用sub_match获取一下,不需要你单独再写表达式了,这样你能理解么??还有就是刚才我想了一下你如果写成\d+不就得了,这样只有你想要的数据在里面啊....
      

  6.   

    也就是说,用sub_match来获得各个分式的匹配字符串,而表达式只匹配了整体?
    问题我实际要读的是字符串……
    总之,谢谢您了!!!
      

  7.   

    原来教程里面有这么个写法
    (?<=(<\\w+>)).*(<\/\1>),说是用来读<log>123</log>标签中的内容的东西,分式是1
    但是我用程序试没弄出来,按您的说法,如果有多个<log1></log1><log2></log2><logn></logn>这样类型的标签,这里的\1可以替换成\d+,有多少个<log></log>的标签就创建多少个分支组?