gpt4 book ai didi

C++ 正则表达式匹配和组

转载 作者:行者123 更新时间:2023-11-28 04:10:17 26 4
gpt4 key购买 nike

我有以下正则表达式:([0-9]+)\/([0-9]*)\/([0-9]*)(在我的代码中正确转义).如您所见,它具有三个捕获组:一个必须至少包含一个数字,以及两个额外的组(可能为空)。

我试图在一个字符串上运行它,该字符串应该为整个正则表达式生成三个匹配项。例如:

f 5/1/1 1/2/1 4/3/1

在这种情况下,正则表达式的结果应如下所示:

第 1 场:5/1/1,第 1 组:5,第 2 组:1,第 3 组:1

第 2 场:1/2/1,第 1 组:1,第 2 组:2,第 3 组:1

第 3 场:4/3/1,第 1 组:4,第 2 组:3,第 3 组:1

但是,按照我的理解,C++11 不能同时返回匹配项和组。

如果我要运行下面的代码,

std::smatch matchs;
std::regex_search("f 5/1/1 1/2/1 4/3/1", matches "([0-9]+)\\/([0-9]*)\\/([0-9]*)");

matches 将有 10 个元素:matches[0] 将是从 5 到末尾的所有元素,matches[1]-matches[9] 会有捕获组。但我不仅要获取分组,还要获取每场比赛(最好是按比赛组织的分组)。

如:matches[1] 将有 5/1/1matches[2] 将有 1/2/1,而 matches[3] 将有 4/3/1。然后,在类似(例如)的情况下:groups[n] 将具有相应的组。或者,如果可能,matches[1].groups 将包含在匹配项中找到的组。

这是正确的吗?和/或是否有某种方法可以轻松获得匹配项和捕获组?

注意:这不是重复问题,因为其他问题似乎询问的是多个匹配组,而不是同时询问。

最佳答案

它的实现方式是使用 regex_search() 进行迭代,其中有
许多原型(prototype)。

正则表达式迭代器的东西在幕后恢复到这个状态。

给你。
关于如何在 C++ 中使用正则表达式,还有很多答案,
让我知道。

std::string::const_iterator start = str.begin();
std::string::const_iterator end = str.end();
std::smatch m;

std::regex rx( "([0-9]+)/([0-9]*)/([0-9]*)" );

while ( std::regex_search( start, end, m, rx ) )
{
std::string sWholeMatch = m[0].str();
std::string sGrp1 = m[1].str();
std::string sGrp2 = m[2].str();
std::string sGrp3 = m[3].str();

int lenGrp1 = sGrp1.length();
int lenGrp2 = sGrp2.length();
int lenGrp3 = sGrp3.length();

start = m[0].second;
}

关于C++ 正则表达式匹配和组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57948029/

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