经过一天的黑客和阅读,我对 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。我已经在其他重新解析器上测试过它,它似乎工作正常。我做错了什么提升?
先感谢您!