123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646 |
- #ifndef BOOST_STRING_REGEX_HPP
- #define BOOST_STRING_REGEX_HPP
- #include <boost/algorithm/string/config.hpp>
- #include <boost/regex.hpp>
- #include <boost/range/iterator_range_core.hpp>
- #include <boost/range/begin.hpp>
- #include <boost/range/end.hpp>
- #include <boost/range/iterator.hpp>
- #include <boost/range/as_literal.hpp>
- #include <boost/algorithm/string/find_format.hpp>
- #include <boost/algorithm/string/regex_find_format.hpp>
- #include <boost/algorithm/string/formatter.hpp>
- #include <boost/algorithm/string/iter_find.hpp>
- namespace boost {
- namespace algorithm {
-
-
- template<
- typename RangeT,
- typename CharT,
- typename RegexTraitsT>
- inline iterator_range<
- BOOST_STRING_TYPENAME range_iterator<RangeT>::type >
- find_regex(
- RangeT& Input,
- const basic_regex<CharT, RegexTraitsT>& Rx,
- match_flag_type Flags=match_default )
- {
- iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(::boost::as_literal(Input));
- return ::boost::algorithm::regex_finder(Rx,Flags)(
- ::boost::begin(lit_input), ::boost::end(lit_input) );
- }
-
-
- template<
- typename OutputIteratorT,
- typename RangeT,
- typename CharT,
- typename RegexTraitsT,
- typename FormatStringTraitsT, typename FormatStringAllocatorT >
- inline OutputIteratorT replace_regex_copy(
- OutputIteratorT Output,
- const RangeT& Input,
- const basic_regex<CharT, RegexTraitsT>& Rx,
- const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,
- match_flag_type Flags=match_default | format_default )
- {
- return ::boost::algorithm::find_format_copy(
- Output,
- Input,
- ::boost::algorithm::regex_finder( Rx, Flags ),
- ::boost::algorithm::regex_formatter( Format, Flags ) );
- }
-
-
- template<
- typename SequenceT,
- typename CharT,
- typename RegexTraitsT,
- typename FormatStringTraitsT, typename FormatStringAllocatorT >
- inline SequenceT replace_regex_copy(
- const SequenceT& Input,
- const basic_regex<CharT, RegexTraitsT>& Rx,
- const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,
- match_flag_type Flags=match_default | format_default )
- {
- return ::boost::algorithm::find_format_copy(
- Input,
- ::boost::algorithm::regex_finder( Rx, Flags ),
- ::boost::algorithm::regex_formatter( Format, Flags ) );
- }
-
-
- template<
- typename SequenceT,
- typename CharT,
- typename RegexTraitsT,
- typename FormatStringTraitsT, typename FormatStringAllocatorT >
- inline void replace_regex(
- SequenceT& Input,
- const basic_regex<CharT, RegexTraitsT>& Rx,
- const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,
- match_flag_type Flags=match_default | format_default )
- {
- ::boost::algorithm::find_format(
- Input,
- ::boost::algorithm::regex_finder( Rx, Flags ),
- ::boost::algorithm::regex_formatter( Format, Flags ) );
- }
-
-
- template<
- typename OutputIteratorT,
- typename RangeT,
- typename CharT,
- typename RegexTraitsT,
- typename FormatStringTraitsT, typename FormatStringAllocatorT >
- inline OutputIteratorT replace_all_regex_copy(
- OutputIteratorT Output,
- const RangeT& Input,
- const basic_regex<CharT, RegexTraitsT>& Rx,
- const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,
- match_flag_type Flags=match_default | format_default )
- {
- return ::boost::algorithm::find_format_all_copy(
- Output,
- Input,
- ::boost::algorithm::regex_finder( Rx, Flags ),
- ::boost::algorithm::regex_formatter( Format, Flags ) );
- }
-
-
- template<
- typename SequenceT,
- typename CharT,
- typename RegexTraitsT,
- typename FormatStringTraitsT, typename FormatStringAllocatorT >
- inline SequenceT replace_all_regex_copy(
- const SequenceT& Input,
- const basic_regex<CharT, RegexTraitsT>& Rx,
- const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,
- match_flag_type Flags=match_default | format_default )
- {
- return ::boost::algorithm::find_format_all_copy(
- Input,
- ::boost::algorithm::regex_finder( Rx, Flags ),
- ::boost::algorithm::regex_formatter( Format, Flags ) );
- }
-
-
- template<
- typename SequenceT,
- typename CharT,
- typename RegexTraitsT,
- typename FormatStringTraitsT, typename FormatStringAllocatorT >
- inline void replace_all_regex(
- SequenceT& Input,
- const basic_regex<CharT, RegexTraitsT>& Rx,
- const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,
- match_flag_type Flags=match_default | format_default )
- {
- ::boost::algorithm::find_format_all(
- Input,
- ::boost::algorithm::regex_finder( Rx, Flags ),
- ::boost::algorithm::regex_formatter( Format, Flags ) );
- }
-
-
- template<
- typename OutputIteratorT,
- typename RangeT,
- typename CharT,
- typename RegexTraitsT >
- inline OutputIteratorT erase_regex_copy(
- OutputIteratorT Output,
- const RangeT& Input,
- const basic_regex<CharT, RegexTraitsT>& Rx,
- match_flag_type Flags=match_default )
- {
- return ::boost::algorithm::find_format_copy(
- Output,
- Input,
- ::boost::algorithm::regex_finder( Rx, Flags ),
- ::boost::algorithm::empty_formatter( Input ) );
- }
-
-
- template<
- typename SequenceT,
- typename CharT,
- typename RegexTraitsT >
- inline SequenceT erase_regex_copy(
- const SequenceT& Input,
- const basic_regex<CharT, RegexTraitsT>& Rx,
- match_flag_type Flags=match_default )
- {
- return ::boost::algorithm::find_format_copy(
- Input,
- ::boost::algorithm::regex_finder( Rx, Flags ),
- ::boost::algorithm::empty_formatter( Input ) );
- }
-
-
- template<
- typename SequenceT,
- typename CharT,
- typename RegexTraitsT >
- inline void erase_regex(
- SequenceT& Input,
- const basic_regex<CharT, RegexTraitsT>& Rx,
- match_flag_type Flags=match_default )
- {
- ::boost::algorithm::find_format(
- Input,
- ::boost::algorithm::regex_finder( Rx, Flags ),
- ::boost::algorithm::empty_formatter( Input ) );
- }
-
-
- template<
- typename OutputIteratorT,
- typename RangeT,
- typename CharT,
- typename RegexTraitsT >
- inline OutputIteratorT erase_all_regex_copy(
- OutputIteratorT Output,
- const RangeT& Input,
- const basic_regex<CharT, RegexTraitsT>& Rx,
- match_flag_type Flags=match_default )
- {
- return ::boost::algorithm::find_format_all_copy(
- Output,
- Input,
- ::boost::algorithm::regex_finder( Rx, Flags ),
- ::boost::algorithm::empty_formatter( Input ) );
- }
-
-
- template<
- typename SequenceT,
- typename CharT,
- typename RegexTraitsT >
- inline SequenceT erase_all_regex_copy(
- const SequenceT& Input,
- const basic_regex<CharT, RegexTraitsT>& Rx,
- match_flag_type Flags=match_default )
- {
- return ::boost::algorithm::find_format_all_copy(
- Input,
- ::boost::algorithm::regex_finder( Rx, Flags ),
- ::boost::algorithm::empty_formatter( Input ) );
- }
-
-
- template<
- typename SequenceT,
- typename CharT,
- typename RegexTraitsT>
- inline void erase_all_regex(
- SequenceT& Input,
- const basic_regex<CharT, RegexTraitsT>& Rx,
- match_flag_type Flags=match_default )
- {
- ::boost::algorithm::find_format_all(
- Input,
- ::boost::algorithm::regex_finder( Rx, Flags ),
- ::boost::algorithm::empty_formatter( Input ) );
- }
-
-
- template<
- typename SequenceSequenceT,
- typename RangeT,
- typename CharT,
- typename RegexTraitsT >
- inline SequenceSequenceT& find_all_regex(
- SequenceSequenceT& Result,
- const RangeT& Input,
- const basic_regex<CharT, RegexTraitsT>& Rx,
- match_flag_type Flags=match_default )
- {
- return ::boost::algorithm::iter_find(
- Result,
- Input,
- ::boost::algorithm::regex_finder(Rx,Flags) );
- }
-
-
- template<
- typename SequenceSequenceT,
- typename RangeT,
- typename CharT,
- typename RegexTraitsT >
- inline SequenceSequenceT& split_regex(
- SequenceSequenceT& Result,
- const RangeT& Input,
- const basic_regex<CharT, RegexTraitsT>& Rx,
- match_flag_type Flags=match_default )
- {
- return ::boost::algorithm::iter_split(
- Result,
- Input,
- ::boost::algorithm::regex_finder(Rx,Flags) );
- }
- #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
-
-
- template<
- typename SequenceSequenceT,
- typename Range1T,
- typename CharT,
- typename RegexTraitsT >
- inline typename range_value<SequenceSequenceT>::type
- join_if(
- const SequenceSequenceT& Input,
- const Range1T& Separator,
- const basic_regex<CharT, RegexTraitsT>& Rx,
- match_flag_type Flags=match_default )
- {
-
- typedef typename range_value<SequenceSequenceT>::type ResultT;
- typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;
-
- InputIteratorT itBegin=::boost::begin(Input);
- InputIteratorT itEnd=::boost::end(Input);
-
- ResultT Result;
-
- while(
- itBegin!=itEnd &&
- !::boost::regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags)) ++itBegin;
-
- if(itBegin!=itEnd)
- {
- detail::insert(Result, ::boost::end(Result), *itBegin);
- ++itBegin;
- }
- for(;itBegin!=itEnd; ++itBegin)
- {
- if(::boost::regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags))
- {
-
- detail::insert(Result, ::boost::end(Result), ::boost::as_literal(Separator));
-
- detail::insert(Result, ::boost::end(Result), *itBegin);
- }
- }
- return Result;
- }
- #else
-
-
- template<
- typename SequenceSequenceT,
- typename Range1T,
- typename CharT,
- typename RegexTraitsT >
- inline typename range_value<SequenceSequenceT>::type
- join_if_regex(
- const SequenceSequenceT& Input,
- const Range1T& Separator,
- const basic_regex<CharT, RegexTraitsT>& Rx,
- match_flag_type Flags=match_default )
- {
-
- typedef typename range_value<SequenceSequenceT>::type ResultT;
- typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;
-
- InputIteratorT itBegin=::boost::begin(Input);
- InputIteratorT itEnd=::boost::end(Input);
-
- ResultT Result;
-
- while(
- itBegin!=itEnd &&
- !::boost::regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags)) ++itBegin;
-
- if(itBegin!=itEnd)
- {
- detail::insert(Result, ::boost::end(Result), *itBegin);
- ++itBegin;
- }
- for(;itBegin!=itEnd; ++itBegin)
- {
- if(::boost::regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags))
- {
-
- detail::insert(Result, ::boost::end(Result), ::boost::as_literal(Separator));
-
- detail::insert(Result, ::boost::end(Result), *itBegin);
- }
- }
- return Result;
- }
- #endif
- }
-
- using algorithm::find_regex;
- using algorithm::replace_regex;
- using algorithm::replace_regex_copy;
- using algorithm::replace_all_regex;
- using algorithm::replace_all_regex_copy;
- using algorithm::erase_regex;
- using algorithm::erase_regex_copy;
- using algorithm::erase_all_regex;
- using algorithm::erase_all_regex_copy;
- using algorithm::find_all_regex;
- using algorithm::split_regex;
- #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
- using algorithm::join_if;
- #else
- using algorithm::join_if_regex;
- #endif
- }
- #endif
|