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

为何std::regex_search无法匹配正确重载?VS2017编译报错

解决Visual Studio 2017中std::regex_search的匹配错误

兄弟,我一眼就瞅出你代码里的核心问题了——std::match_results的模板参数用错了,咱们一步步捋清楚:

你当前代码里用的是std::match_results<char>,但这个模板类的参数要求是迭代器类型,不是单纯的字符类型。因为你传给std::regex_search的第一个参数是字符串字面量"This is a test.",它的实际类型是const char*,所以对应的match_results必须用const char*作为模板参数才能匹配重载。

修正后的代码(直接适配你的原始写法)

#include <regex>
#include <iostream>

int main() {
    std::basic_regex<char> rx("This");
    std::match_results<const char*> mat; // 这里把char改成const char*
    const char* str = "This is a test.";
    bool match_success = std::regex_search(str, mat, rx, std::regex_constants::match_continuous);
    
    // 加个输出验证匹配结果
    if (match_success) {
        std::cout << "匹配成功: " << mat[0] << std::endl;
    } else {
        std::cout << "匹配失败" << std::endl;
    }
    return 0;
}

更符合C++习惯的写法(用std::string简化)

如果用std::string来存储输入字符串,还可以用std::smatch这个别名(它是std::match_results<std::string::const_iterator>的简写),代码会更简洁:

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

int main() {
    std::regex rx("This"); // 等价于std::basic_regex<char>
    std::smatch mat; // 专门用于std::string的匹配结果存储
    std::string str = "This is a test.";
    
    bool match_success = std::regex_search(str, mat, rx, std::regex_constants::match_continuous);
    
    if (match_success) {
        std::cout << "匹配成功: " << mat[0] << std::endl;
    } else {
        std::cout << "匹配失败" << std::endl;
    }
    return 0;
}

这两种写法都能正确匹配到字符串开头的"This",解决你之前遇到的编译器错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:22:01