C ++ 11尝试使用正则表达式提取子字符串

时间:2018-12-14 14:42:13

标签: c++ regex c++11

这是我的应用程序:

// regex_example.cpp:
//  How to compile:
//   $ g++ -std=c++11 regex_example.cpp -o regex_example

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

int main()
{
  std::string input = "Pizza Carrot Lasagna 15000  ";
  std::smatch match;
  std::regex test_reg("[^0-9]*([0-9]+).*");

  if (std::regex_search(input.begin(), input.end(), match, test_reg))
  {
    std::cout << "This is the string found: " << match[1] << std::endl;
  }

  return 0;
}

编译时,这是编译器显示的内容:

  

regex_example.cpp:在函数“ int main()”中:regex_example.cpp:24:68:   错误:没有匹配的调用函数   ‘regex_search(std :: __ cxx11 :: basic_string :: iterator,   std :: __ cxx11 :: basic_string :: iterator,std :: __ cxx11 :: smatch&,   std :: __ cxx11 :: regex&)”,如果(std :: regex_search(input.begin(),   input.end(),match,test_reg))

基本上,我正在尝试执行以下操作:

1-进行编译。我不明白为什么会出现语法错误。

2-我正在尝试从输入字符串中提取数字15000。我假设在进行此编译时,我将得到一个字符串15000。

1 个答案:

答案 0 :(得分:0)

使用

std::regex_search(input.begin(), input.end(), match, test_reg)

调用超载

template< class BidirIt, class Alloc, class CharT, class Traits >
bool regex_search( BidirIt first, BidirIt last,
                   std::match_results<BidirIt,Alloc>& m,
                   const std::basic_regex<CharT,Traits>& e,
                   std::regex_constants::match_flag_type flags = 
                       std::regex_constants::match_default );

,它要求match_resultstd::match_results<BidirIt,Alloc>。在这种情况下,它是std::string::iterator,而matchstd::smatch,则使用std::string::const_iterator。由于这些不匹配,因此编译器无法确定BidirIt的含义。

有许多方法可以解决此问题,但是最简单的解决方案是仅使用std::string重载,如:

std::regex_search(input, match, test_reg)

Live Example