经过一整天的研究和阅读,我在使用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得到的输出,要注意的是我请求了整行和第一组匹配,同时我还请求了一个“|”以便我们能够轻松地看到行末:
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。 我已经在其他正则表达式解析器上测试过,结果都很好。 请问我在使用boost时做错了什么?
谢谢您!
*it++
应该改为++it
。但这(可能)不会影响您的结果。 - Alan Stokes