You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++11中regex_replace关联自定义函数问题:含判断代码失效

问题分析

你的代码存在两个核心问题:

  1. 替换器使用错误:你直接调用ty("$&")并将返回值传给regex_replace,这里的"$&"是字面量字符串,并非正则匹配到的实际内容。也就是说ty接收的永远是"$&",而非你期望的"brown"。
  2. 正则表达式范围过大:你的正则R"(\$(.*))"会匹配从$开始到字符串结尾的所有内容(即"$brown fox"),捕获组1的内容是"brown fox",和你判断的"brown"不相等,因此会进入else分支返回"qw"。
解决方案

修正这两个问题即可,以下是完整可运行代码:

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

std::string ty(const std::smatch& match) {
    // 提取第一个捕获组的内容($后面的目标字符串)
    std::string text = match[1].str();
    if(text == "brown")
        return "true";
    else
        return "qw";
}

int main()
{
   std::string text = "Quick $brown fox";
   // 调整正则为匹配$后的单个单词,避免捕获过多内容
   std::cout << '\n' << std::regex_replace(text, std::regex(R"(\$(\w+))"), ty) << '\n';
}
关键说明
  • 正确传递替换函数:直接将ty函数名传给regex_replace,而非调用ty的结果。regex_replace会自动为每个匹配内容调用ty,并传入包含匹配信息的std::smatch对象。
  • 正则调整:使用R"(\$(\w+))"匹配$后面的单个单词(\w+匹配字母、数字、下划线),确保捕获组1的内容是你需要判断的"brown"。
  • 函数参数适配:修改ty的参数为const std::smatch&,通过match[n].str()获取第n个捕获组的字符串内容。

运行这段代码会输出:

Quick true fox

内容的提问来源于stack exchange,提问作者nima_cpp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 17:55:46