c++ - 如何在使用boost.xpressive的sregex_token_iterator循环中判断匹配的规则?

 坐看末日之景L_170 发布于 2022-11-07 21:52

我想对一个字符串进行字段分析,比如“a+b:c"。我使用了boost.xpressive,程序片段如下(忽略了库的包含和命名空间的使用):

sregex reOp = as_xpr('+') | '-' | '*' | '/';
sregex reDelim = as_xpr(':');
sregex reField = +_w;
sregex reSimpleToken = reOp | reDelim | reField;

string str = "a+b:c";

sregex_token_iterator cur(str.begin(), str.end(), reSimpleToken), end;
for (; cur != end; ++cur) {
    cout << *cur << endl;
}

会打印出:

a
+
b
:
c

但是我希望能够在循环里获知是哪一个规则(reOpreDelimreField)匹配成功,然后才能做相应操作。

1 个回答
  • 简单说你用semantic action就可以,比如:

        sregex reOp = as_xpr('+') | '-' | '*' | '/';
        sregex reDelim = as_xpr(':');
        sregex reField = +_w;
        sregex reSimpleToken = (s1=reOp)[ /*Do something about reOp here*/ ]
            | (s1=reDelim)[ /*Do something about reDelim here*/ ]
            | (s1=reField)[ /*Do something about reField here*/ ]
        ;
    
    2022-11-12 01:43 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有