这是我的应用程序:
// 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。
答案 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_result
是std::match_results<BidirIt,Alloc>
。在这种情况下,它是std::string::iterator
,而match
是std::smatch
,则使用std::string::const_iterator
。由于这些不匹配,因此编译器无法确定BidirIt
的含义。
有许多方法可以解决此问题,但是最简单的解决方案是仅使用std::string
重载,如:
std::regex_search(input, match, test_reg)