之前缺少模板参数

时间:2018-05-01 15:57:08

标签: c++ regex string

我正在尝试使用正则表达式在字符串中包含一个子字符串,但似乎收到以下错误:

//code
#include <regex>
#include <iostream>
using namespace std;

int main(){

string str1="hello \"trimthis\" please";
regex rgx("\"([^\"]*)\""); // will capture "trimthis"
regex_iterator current(str1.begin(), str1.end(), rgx);
regex_iterator end;
while (current != end)
    cout << *current++; 
return 0;
}

//错误 在&#39;当前&#39;之前缺少模板参数

在&#39;结束&#39;

之前缺少模板参数

&#39;电流&#39;未在此范围内声明

我尝试做的事情是否有不同的语法因为我之前没有使用过正则表达式而且是c ++的新手

1 个答案:

答案 0 :(得分:1)

问题1

regex_iterator是一个类模板。您需要使用sregex_iterator

问题2

*current评估为std::smatch。将此类对象插入std::ostream没有过载。你需要使用:

  cout << current->str();

这是该程序的更新版本,对我有用。

//code
#include <regex>
#include <iostream>
using namespace std;

int main(){

   string str1="hello \"trimthis\" please";
   regex rgx("\"([^\"]*)\""); // will capture "trimthis"
   sregex_iterator current(str1.begin(), str1.end(), rgx);
   sregex_iterator end;
   while (current != end)
   {
      cout << current->str() << endl;  // Prints the entire match "trimthis"
      cout << current->str(1) << endl; // Prints the group, trimthis
      current++; 
   }
   return 0;
}