【发布时间】:2011-09-02 23:01:19
【问题描述】:
经过一天的黑客和阅读,我对 boost 的正则表达式引擎没有运气,希望这里有人可以提供帮助。
我想从最后一个字段匹配某些输入的每一行中获取第一个字段。
string input =
"449 a dingo ate my baby THING\n"
"448 a dingo ate my baby THING\n"
"445 a dingo ate my baby BOOGNISH\n"
"446 a dingo ate my baby BOOGNISH\n"
"447 a dingo ate my baby STUFF\n";
假设我给我的正则表达式以下字符串...
string re = "^([0-9]+).+?boognish$";
boost::regex expression(re,boost::regex::perl | boost:regex::icase);
然后设置我的比赛
const int subs[] = { 0, 1 };
boost::sregex_token_iterator it(input.begin(), input.end(), expression, subs);
boost::sregex_token_iterator end;
while ( it != end )
{
fprintf(stderr,"%s|\n", it->str().c_str());
*it++;
}
这是我从 boost 中得到的输出,请记住,我要求了整条线和第 1 组比赛,我还要求了“|”所以我们可以很容易地看到行尾:
449 a dingo ate my baby THING
448 a dingo ate my baby THING
445 a dingo ate my baby BOOGNISH|
449|
446 a dingo ate my baby BOOGNISH|
446|
我真的很想要445|和 446|只是,但它给了我 449(直到它达到第一个 BOOGNISH),然后是 446。我已经在其他重新解析器上测试过它,它似乎工作正常。我做错了什么提升?
提前谢谢你!
【问题讨论】:
-
*it++应该是++it。但这(可能)不会影响您的结果。
标签: c++ regex boost boost-regex