c++ - boost 正则表达式捕获组

标签 c++ regex boost boost-regex

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

提前致谢!

最佳答案

根据 this articale您必须将 flag match_not_dot_newline 传递给匹配算法。我认为这会解决您的问题。

关于c++ - boost 正则表达式捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6145112/

相关文章:

c++ - 将二进制转换为 ASCII

regex - Python重新转义正则表达式模式中的巧合括号

c++ - 无限循环不会浪费cpu资源吗?

c++ - 访问属性树中的多值键

c++ - 从线程内 fork 是否安全?

c++ - 尝试实现 PIMPL 习语时如何避免 "redefinition; different basic types"

javascript - 如何调整谷歌地图的宽度和高度

MySQL正则表达式返回两列之间至少有一个单词匹配的所有记录

C++/Boost 字符串替换 : How do I replace '&' with '&' only when & ends with a ;

c++ - 在 C++ 应用程序中添加脚本