diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2017-08-30 10:23:06 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2017-08-30 20:57:48 +0300 |
commit | 0cf84e1f006988c114bdca36715d3a2c0601a7d5 (patch) | |
tree | 8f372d93ac2ed9bde3b57e1e4efe440b3d86d056 /libbutl/regex.hxx | |
parent | c9a062d44807803f1cdfcfe62d49ad1f18162baa (diff) |
Generalize regex_replace_ex() function
Diffstat (limited to 'libbutl/regex.hxx')
-rw-r--r-- | libbutl/regex.hxx | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/libbutl/regex.hxx b/libbutl/regex.hxx index e4fd6a7..2105f05 100644 --- a/libbutl/regex.hxx +++ b/libbutl/regex.hxx @@ -14,13 +14,18 @@ namespace butl { - // Like std::regex_match() but extends the standard ECMA-262 - // substitution escape sequences with a subset of Perl sequences: + // Call specified append() function for non-matched substrings and matched + // substring replacements returning true if search succeeded. The function + // must be callable with the following signature: // - // \\, \u, \l, \U, \L, \E, \1, ..., \9 + // void + // append(basic_string<C>::iterator begin, basic_string<C>::iterator end); // - // Also return the resulting string as well as whether the search - // succeeded. + // The regex semantics is like that of std::regex_replace() extended the + // standard ECMA-262 substitution escape sequences with a subset of Perl + // sequences: + // + // \\, \u, \l, \U, \L, \E, \1, ..., \9 // // Notes and limitations: // @@ -34,6 +39,19 @@ namespace butl // C++ locale (which is, unless changed, is the same as C locale and // both default to the POSIX locale aka "C"). // + template <typename C, typename F> + bool + regex_replace_ex (const std::basic_string<C>&, + const std::basic_regex<C>&, + const std::basic_string<C>& fmt, + F&& append, + std::regex_constants::match_flag_type = + std::regex_constants::match_default); + + // As above but concatenate non-matched substrings and matched substring + // replacements into a string returning it as well as whether the search + // succeeded. + // template <typename C> std::pair<std::basic_string<C>, bool> regex_replace_ex (const std::basic_string<C>&, @@ -52,6 +70,7 @@ namespace std operator<< (ostream&, const regex_error&); } +#include <libbutl/regex.ixx> #include <libbutl/regex.txx> #endif // LIBBUTL_REGEX_HXX |