13 #include <boost/algorithm/string.hpp>
19 static const std::regex expression(
"\\$(([A-Za-z0-9_]+)|\\(([A-Za-z0-9_]+)\\))" );
21 std::string result = std::string{ input };
22 auto start = input.begin();
23 auto end = input.end();
24 std::match_results<std::string_view::const_iterator> what;
25 auto flags = std::regex_constants::match_default;
26 while ( std::regex_search(
start,
end, what, expression, flags ) ) {
27 std::string var{ what[2].first, what[2].second };
28 if ( var.empty() ) var = std::string{ what[3].first, what[3].second };
31 boost::algorithm::replace_first( result, std::string{ what[0].first, what[0].second }, env );
33 start = what[0].second;
35 flags |= std::regex_constants::match_prev_avail;