gpt4 book ai didi

c++ - 确定 C++11 正则表达式匹配的位置

转载 作者:行者123 更新时间:2023-11-30 02:37:00 25 4
gpt4 key购买 nike

如何有效地确定搜索字符串中捕获组的位置?获取整场比赛的位置很容易,但我看不出有什么明显的方法可以找到第一个以外的捕获组。

这是一个简化的示例,假设“a*”和“b*”是运行成本高昂的复杂正则表达式。

#include <iostream>
#include <regex>
#include <string>
using namespace std;

int main()
{
regex matcher("a*(needle)b*");
smatch findings;
string haystack("aaaaaaaaneedlebbbbbbbbbbbbbb");

if( regex_match(haystack, findings, matcher) )
{
// What do I put here to know how the offset of "needle" in the
// string haystack?

// This is the position of the entire, which is
// always 0 with regex_match, with regex_search
cout << "smatch::position - " << findings.position() << endl;

// Is this just a string or what? Are there member functions
// That can be called?
cout << "Needle - " << findings[1] << endl;
}

return 0;
}

如果有帮助,我在 Coliru 中构建了这个问题:http://coliru.stacked-crooked.com/a/885a6b694d32d9b5

最佳答案

在 72 小时过去并且没有更好的答案出现之前,我不会将此标记为并回答。

在问这个之前我假设 smatch::position 没有我关心的参数,因为当我读到 cppreference页面“sub”参数显然不是匹配容器的索引。我认为这与“子”字符串和整个匹配的偏移值有关。

所以我的答案是:

cout << "Needle Position- " << findings.position(1) << endl;

任何对此设计的解释,或我的思路可能导致的其他问题,我们将不胜感激。

关于c++ - 确定 C++11 正则表达式匹配的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32103030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com