gpt4 book ai didi

c++ - 通过一个简单的例子理解 c++ 正则表达式

转载 作者:IT老高 更新时间:2023-10-28 22:21:02 30 4
gpt4 key购买 nike

我写了以下简单的例子:

#include <iostream>
#include <string>
#include <regex>

int main ()
{
std::string str("1231");
std::regex r("^(\\d)");
std::smatch m;
std::regex_search(str, m, r);
for(auto v: m) std::cout << v << std::endl;
}

DEMO

并被它的行为弄糊涂了。如果我从 there 了解 match_result 的目的正确地,应该只打印一个 1 。其实:

If successful, it is not empty and contains a series of sub_match objects: the first sub_match element corresponds to the entire match, and, if the regex expression contained sub-expressions to be matched ([...])

传递给函数的字符串与正则表达式不匹配,因此我们应该拥有整个匹配项

我错过了什么?

最佳答案

您仍然得到 整个匹配,但 整个匹配 不适合 整个字符串 它适合 整个正则表达式

例如考虑这个:

#include <iostream>
#include <string>
#include <regex>

int main()
{
std::string str("1231");
std::regex r("^(\\d)\\d"); // entire match will be 2 numbers

std::smatch m;
std::regex_search(str, m, r);

for(auto v: m)
std::cout << v << std::endl;
}

输出:

12
1

整个匹配(第一个子匹配)是整个正则表达式匹配的(字符串的一部分)。

第二个 sub_match 是第一个(也是唯一的)捕获组

查看你原来的正则表达式

std::regex r("^(\\d)");
|----| <- entire expression (sub_match #0)

std::regex r("^(\\d)");
|---| <- first capture group (sub_match #1)

这就是两个 sub_matches 的来源。

关于c++ - 通过一个简单的例子理解 c++ 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30921932/

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