aboutsummaryrefslogtreecommitdiff
path: root/libbutl/regex.hxx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2017-08-30 10:23:06 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2017-08-30 20:57:48 +0300
commit0cf84e1f006988c114bdca36715d3a2c0601a7d5 (patch)
tree8f372d93ac2ed9bde3b57e1e4efe440b3d86d056 /libbutl/regex.hxx
parentc9a062d44807803f1cdfcfe62d49ad1f18162baa (diff)
Generalize regex_replace_ex() function
Diffstat (limited to 'libbutl/regex.hxx')
-rw-r--r--libbutl/regex.hxx29
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