c++ - 如何在使用boost.xpressive的sregex_token_iterator循环中判断匹配的规则?
PHP中文网
PHP中文网 2017-04-17 11:25:27
[C++讨论组]

我想对一个字符串进行字段分析,比如“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)匹配成功,然后才能做相应操作。

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(1)
PHP中文网

简单说你用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*/ ]
    ;
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号