I try to pass a pair of iterators to represent a string sequence:
#include
#include
using namespace std;
int main(int
The issue you are having here is a type mismatch between the iterators you are passing to regex_search
and the iterator defined for smatch
. std::smatch
is defined as:
typedef match_results smatch;
and iter
and end
have the type of
string::iterator
When you call regex_search the iterator version is defined as
template< class BidirIt, class Alloc, class CharT, class Traits > bool regex_search( BidirIt first, BidirIt last, std::match_results
& m, const std::basic_regex & e, std::regex_constants::match_flag_type flags = std::regex_constants::match_default );
And as we can see the iterators and the iterators of the match_result
have to match. If we change
auto iter = test.begin();
auto end = test.end();
To
auto iter = test.cbegin();
auto end = test.cend();
Then everything now has the type of string::const_iterator
and it will compile
#include
#include
#include
using namespace std;
int main()
{
smatch results;
string temp("abc");
string test("abc");
regex r(temp);
auto iter = test.cbegin();
auto end = test.cend();
if (regex_search(iter, end, results, r))
cout << results.str() << endl;
return 0;
}
Live Example