gpt4 book ai didi

c++ - 正则表达式匹配是否保证始终只查找最后一个模式? C++

转载 作者:行者123 更新时间:2023-11-30 04:52:24 24 4
gpt4 key购买 nike

<分区>

假设我有这样一个字符串:

"a-b-c-d"

n = 4 个序列,由 “-” 分隔。

现在我想接收前 n - 1 个序列 ("a-b-c") 和最后一个序列 - ("d")。

我可以用下面的代码实现这个:

std::string string{ "a-b-c-d" };

std::regex reg{ "^(.*)-(.*)$" };

std::smatch match;
std::regex_match(string, match, reg);

std::cout << match.str(1) << '\n';
std::cout << match.str(2) << '\n';

产生预期的输出:

a-b-c
d

但是,遵循这个正则表达式的纯逻辑语法 ("^(.*)-(.*)$")

a
b-c-d

a-b
c-d

也可以是字符串的有效匹配项。毕竟 (.*) 可以在这里有不同的解释,第一个 (.*) 可以决定在第一个字符序列或第二个字符序列处停止等

所以我的问题是:std::smatch 是否保证以这种方式运行?在提供使用 (.*) 捕获的选项时,std::smatch 是否总是明确地寻找最后的模式?有没有办法告诉 std::smatch 寻找第一次出现而不是最后一次出现?

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