首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提升正则表达式捕获组

提升正则表达式捕获组
EN

Stack Overflow用户
提问于 2011-05-27 05:10:02
回答 1查看 3.4K关注 0票数 5

经过几天的研究和阅读,我对boost的regex引擎一无所知,希望这里有人能帮上忙。

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

代码语言:javascript
复制
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";

假设我将下面的字符串赋予我的正则表达式...

代码语言:javascript
复制
string re = "^([0-9]+).+?boognish$";
boost::regex expression(re,boost::regex::perl | boost:regex::icase);

然后安排我的比赛

代码语言:javascript
复制
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匹配,我还要求输入一个"|“,这样我们就可以很容易地看到行尾:

代码语言:javascript
复制
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做错了什么?

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-27 05:27:10

根据this articale,您必须将flag match_not_dot_newline传递给匹配算法。我想这会解决你的案子。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6145112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档