std::size_t regex_split(OutputIterator out, std::basic_string<charT, Traits1, Alloc1>& s, const basic_regex<charT, Traits2>& e, match_flag_type flags, std::size_t max_split) { typedef typename std::basic_string<charT, Traits1, Alloc1>::const_iterator ci_t; //typedef typename match_results<ci_t>::allocator_type match_allocator; ci_t last = s.begin(); std::size_t init_size = max_split; re_detail::split_pred<OutputIterator, charT, Traits1, Alloc1> pred(&last, &out, &max_split); ci_t i, j; i = s.begin(); j = s.end(); regex_grep(pred, i, j, e, flags); // // if there is still input left, do a final push as long as max_split // is not exhausted, and we're not splitting sub-expressions rather // than whitespace: if(max_split && (last != s.end()) && (e.mark_count() == 0)) { *out = std::basic_string<charT, Traits1, Alloc1>((ci_t)last, (ci_t)s.end()); ++out; last = s.end(); --max_split; } // // delete from the string everything that has been processed so far: s.erase(0, last - s.begin()); // // return the number of new records pushed: return init_size - max_split; }
inline unsigned int regex_grep(bool (*foo)(const match_results<std::basic_string<wchar_t>::const_iterator>&), const std::basic_string<wchar_t>& s, const wregex& e, match_flag_type flags = match_default) { return regex_grep(foo, s.begin(), s.end(), e, flags); }
inline unsigned int regex_grep(Predicate foo, const std::basic_string<charT, ST, SA>& s, const reg_expression<charT, traits, Allocator>& e, match_flag_type flags = match_default) { return regex_grep(foo, s.begin(), s.end(), e, flags); }
inline unsigned int regex_grep(Predicate foo, const charT* str, const reg_expression<charT, traits, Allocator>& e, match_flag_type flags = match_default) { return regex_grep(foo, str, str + traits::length(str), e, flags); }
inline unsigned int regex_grep(bool (*foo)(const wcmatch&), const wchar_t* str, const wregex& e, match_flag_type flags = match_default) { return regex_grep(foo, str, str + wregex::traits_type::length(str), e, flags); }
inline unsigned int regex_grep(Predicate foo, const charT* str, const basic_regex<charT, traits>& e, match_flag_type flags = match_default) { return regex_grep(foo, str, str + traits::length(str), e, flags); }