c++ - 是否可以计算任意 std::regex 对象中的捕获组数?
问题描述
对于任意的std::regex
,是否可以知道其中的捕获组数?
假设结果将由函数返回CountCaptures()
。这就是我想要得到的:
std::regex r1("(a)bc");
int i = CountCaptures(r1); // returns 1
std::regex r2("(a)(b)c");
int j = CountCaptures(r2); // returns 2
std::regex r3("abc");
int k = CountCaptures(r3); // returns 0
我知道std::smatch
在匹配字符串之后这是可能的,但问题是我从用户那里收到一个正则表达式,我需要在匹配任何字符串之前以某种方式约束捕获组。
解决方案
您可以使用std::basic_regex::mark_count()
.
示例用法
std::regex r1{"abcde"};
std::cout << "r1 has " << r1.mark_count() << " capture groups" << '\n';
std::regex r2{"ab(c)de"};
std::cout << "r2 has " << r2.mark_count() << " capture groups" << '\n';
std::regex r3{"abc(de(fg))"};
std::cout << "r3 has " << r3.mark_count() << " capture groups" << '\n';
输出:
r1 has 0 capture groups
r2 has 1 capture groups
r3 has 2 capture groups
推荐阅读
- pdfbox - 通过pdfbox删除pdf中的一个句子
- amazon-web-services - AWS Amplify 推送不断失败
- python - 熊猫数据框,按另一列中的值排名,不使用 Python FOR 循环
- c++ - 多重继承顺序重要吗?
- node.js - Nodejs调用api更新数据不刷新
- javascript - 登录 - 将网站重定向到不同的页面 jquery
- typescript - 打字稿错误:不可分配给“ComponentType”类型的参数
- python - 如何判断二维numpy数组中是否包含一维numpy数组?
- angular - 模块 '"@abp/ng.core"' 在 4.2(最新)中没有导出成员 'SetLanguage'
- html - 根据,jumbotron 等有多少网站元素或部分列表?