增强正则表达式捕获组

boost regular expression capture groups

本文关键字:正则表达式 增强      更新时间:2023-10-16

经过几天的黑客攻击和阅读,我对boost的正则表达式引擎运气不佳,希望这里有人能帮忙。

我想从每一行中抓取第一个字段,其中最后一个字段匹配一些输入。

string input =
    "449 a dingo ate my baby THINGn"
    "448 a dingo ate my baby THINGn"
    "445 a dingo ate my baby BOOGNISHn"
    "446 a dingo ate my baby BOOGNISHn"
    "447 a dingo ate my baby STUFFn";

假设我给正则表达式给定以下字符串。。。

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(直到它击中第一个BOGNISH),然后是446。我已经在其他重新解析器上测试过了,它似乎工作得很好。我的boost怎么了?

提前谢谢!

根据本文,您必须将flag match_not_dot_newline传递给匹配算法。我认为那会解决你的案子。