经过一天的黑客攻击和阅读后,我对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.我已经在其他re解析器上测试了它,它似乎工作正常。我对提升有什么不妥?
提前谢谢!