Chris@16: /* Chris@16: * Chris@16: * Copyright (c) 1998-2009 Chris@16: * John Maddock Chris@16: * Chris@16: * Use, modification and distribution are subject to the Chris@16: * Boost Software License, Version 1.0. (See accompanying file Chris@16: * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: * Chris@16: */ Chris@16: Chris@16: /* Chris@16: * LOCATION: see http://www.boost.org for most recent version. Chris@16: * FILE regex_format.hpp Chris@16: * VERSION see Chris@16: * DESCRIPTION: Provides formatting output routines for search and replace Chris@16: * operations. Note this is an internal header file included Chris@16: * by regex.hpp, do not include on its own. Chris@16: */ Chris@16: Chris@16: #ifndef BOOST_REGEX_V4_REGEX_REPLACE_HPP Chris@16: #define BOOST_REGEX_V4_REGEX_REPLACE_HPP Chris@16: Chris@16: Chris@16: namespace boost{ Chris@16: Chris@16: #ifdef BOOST_MSVC Chris@16: #pragma warning(push) Chris@16: #pragma warning(disable: 4103) Chris@16: #endif Chris@16: #ifdef BOOST_HAS_ABI_HEADERS Chris@16: # include BOOST_ABI_PREFIX Chris@16: #endif Chris@16: #ifdef BOOST_MSVC Chris@16: #pragma warning(pop) Chris@16: #endif Chris@16: Chris@16: template Chris@16: OutputIterator regex_replace(OutputIterator out, Chris@16: BidirectionalIterator first, Chris@16: BidirectionalIterator last, Chris@16: const basic_regex& e, Chris@16: Formatter fmt, Chris@16: match_flag_type flags = match_default) Chris@16: { Chris@16: regex_iterator i(first, last, e, flags); Chris@16: regex_iterator j; Chris@16: if(i == j) Chris@16: { Chris@16: if(!(flags & regex_constants::format_no_copy)) Chris@16: out = re_detail::copy(first, last, out); Chris@16: } Chris@16: else Chris@16: { Chris@16: BidirectionalIterator last_m(first); Chris@16: while(i != j) Chris@16: { Chris@16: if(!(flags & regex_constants::format_no_copy)) Chris@16: out = re_detail::copy(i->prefix().first, i->prefix().second, out); Chris@16: out = i->format(out, fmt, flags, e); Chris@16: last_m = (*i)[0].second; Chris@16: if(flags & regex_constants::format_first_only) Chris@16: break; Chris@16: ++i; Chris@16: } Chris@16: if(!(flags & regex_constants::format_no_copy)) Chris@16: out = re_detail::copy(last_m, last, out); Chris@16: } Chris@16: return out; Chris@16: } Chris@16: Chris@16: template Chris@16: std::basic_string regex_replace(const std::basic_string& s, Chris@16: const basic_regex& e, Chris@16: Formatter fmt, Chris@16: match_flag_type flags = match_default) Chris@16: { Chris@16: std::basic_string result; Chris@16: re_detail::string_out_iterator > i(result); Chris@16: regex_replace(i, s.begin(), s.end(), e, fmt, flags); Chris@16: return result; Chris@16: } Chris@16: Chris@16: #ifdef BOOST_MSVC Chris@16: #pragma warning(push) Chris@16: #pragma warning(disable: 4103) Chris@16: #endif Chris@16: #ifdef BOOST_HAS_ABI_HEADERS Chris@16: # include BOOST_ABI_SUFFIX Chris@16: #endif Chris@16: #ifdef BOOST_MSVC Chris@16: #pragma warning(pop) Chris@16: #endif Chris@16: Chris@16: } // namespace boost Chris@16: Chris@16: #endif // BOOST_REGEX_V4_REGEX_REPLACE_HPP Chris@16: Chris@16: