在asking this question on SO之后,我意识到我需要用另一个字符串替换字符串中的所有匹配项。在我的情况下,我想用'\ s *'替换所有出现的空格(即任意数量的空格将匹配)。
所以我设计了以下内容:
#include <string>
#include <regex>
int main ()
{
const std::string someString = "here is some text";
const std::string output = std::regex_replace(someString.c_str(), std::regex("\\s+"), "\\s*");
}
此操作失败,输出如下:
错误:没有匹配函数来调用'regex_replace(const char *,std :: regex,const char [4])
不要气馁,我前往cplusplus.com,发现我的尝试实际上很好地匹配了regex_replace
函数的第一个原型,所以我很惊讶编译器无法运行它(对于你参考:http://www.cplusplus.com/reference/regex/match_replace/)
所以我想我只是run the example他们提供了这个功能:
// regex_replace example
#include <iostream>
#include <string>
#include <regex>
#include <iterator>
int main ()
{
std::string s ("there is a subsequence in the string\n");
std::regex e ("\\b(sub)([^ ]*)"); // matches words beginning by "sub"
// using string/c-string (3) version:
std::cout << std::regex_replace (s,e,"sub-$2");
// using range/c-string (6) version:
std::string result;
std::regex_replace (std::back_inserter(result), s.begin(), s.end(), e, "$2");
std::cout << result;
// with flags:
std::cout << std::regex_replace (s,e,"$1 and $2",std::regex_constants::format_no_copy);
std::cout << std::endl;
return 0;
}
但是当我运行这个时,我得到完全相同的错误!
因此, ideone.com 或 cplusplus.com 都是错误的。我试图诊断那些比我更聪明的人的错误,而不是把我的头撞在墙上,我将不遗余力地问我。
答案 0 :(得分:7)
答案 1 :(得分:0)
简单代码C ++ regex_replace只有字母数字字符
#include <iostream>
#include <regex>
using namespace std;
int main() {
const std::regex pattern("[^a-zA-Z0-9.-_]");
std::string String = "!#!e-ma.il@boomer.zx";
// std::regex_constants::icase
// Only first
// std::string newtext = std::regex_replace( String, pattern, "X", std::regex_constants::format_first_only );
// All case insensitive
std::string newtext = std::regex_replace( String, pattern, "", std::regex_constants::icase);
std::cout << newtext << std::endl;
return 0;
}