C++中使用regex_search函数时出现参数类型不匹配问题
解决regex_search参数类型不匹配及正则表达式转义问题
我刚看了你贴的代码片段,问题其实出在两个关键地方——正则表达式的转义错误,还有你没完整写出regex_search的调用逻辑(结合常见场景推测),这两点都会导致编译报错,比如参数类型不匹配或者正则表达式无效。
问题1:正则表达式的转义字符错误
在C++的字符串字面量里,\是转义字符,你写的"\b(sub)([^ ]*)"里的\b会被编译器解析成退格符,而不是正则表达式中表示单词边界的\b。要让正则正确识别单词边界,你需要把字符串写成"\\b(sub)([^ ]*)"——用两个反斜杠来表示正则里的单个反斜杠。
问题2:缺失/错误的regex_search调用
你贴的代码里没写出regex_search的调用语句,这个函数的参数顺序是「目标字符串 → 匹配结果对象 → 正则表达式」,如果参数顺序搞反或者完全没写,肯定会报参数类型不匹配的错误。
修正后的完整代码
// regex_search example #include <iostream> #include <string> #include <regex> int main () { std::string s ("this subject has a submarine as a subsequence"); std::smatch m; std::regex e ("\\b(sub)([^ ]*)"); // 修正转义字符 std::cout << "Target sequence: " << s << std::endl; std::cout << "Regular expression: \\b(sub)([^ ]*)" << std::endl; std::cout << "The matches are:" << std::endl; // 正确调用regex_search并遍历所有匹配结果 while (std::regex_search(s, m, e)) { for (auto x : m) std::cout << x << " "; std::cout << std::endl; s = m.suffix().str(); // 更新字符串,匹配剩余部分 } return 0; }
这样修改后,正则表达式的\b会被正确识别为单词边界,regex_search的参数也完全符合要求,编译就能正常通过,还能正确匹配所有以sub开头的单词。
内容的提问来源于stack exchange,提问作者Fabián Montero
相关产品推荐
相关产品推荐

