我如何使用regex_replace?

时间:2014-07-28 07:46:52

标签: c++ regex

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])

工作示例:http://ideone.com/yEpgXy

不要气馁,我前往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;
}

但是当我运行这个时,我得到完全相同的错误!

工作示例:http://ideone.com/yEpgXy

因此, ideone.com cplusplus.com 都是错误的。我试图诊断那些比我更聪明的人的错误,而不是把我的头撞在墙上,我将不遗余力地问我。

2 个答案:

答案 0 :(得分:7)

您需要将编译器更新为GCC 4.9。

尝试使用boosts regex替代

regex_replace

答案 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;
}

运行https://ideone.com/CoMq3r