gpt4 book ai didi

c++ - regex_replace 两次匹配字符串结尾

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:07:25 28 4
gpt4 key购买 nike

考虑以下程序:

#include <iostream>
#include <regex>

int main(int argc, char* argv[]) {
if (argc==4)
std::cout << std::regex_replace(
argv[1], std::regex(argv[2]), argv[3]
) << std::endl;
}

运行

./a.out a_a_a '[^_]+$' b

给出预期结果a_a_b。但是运行

./a.out a_a_a '[^_]*$' b

打印a_a_bb

boost::regex_replace 具有相同的行为。

我不明白为什么在我已经消费了 $ 之后,最后一个 a 之后的空字符串再次被匹配。

最佳答案

anchor 不会被消耗(因为它们的宽度为 0)。

您可以尝试使模式 abc$$$ 与字符串 abc 匹配,它仍然会匹配,模式 ^^^abc。因此,函数中的 $ 不会被消耗,并允许 a$(empty)$ 匹配。

关于c++ - regex_replace 两次匹配字符串结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46109594/

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