diff --git a/include/cpp2regex.h b/include/cpp2regex.h
index ed01c237a..74d6c5574 100644
--- a/include/cpp2regex.h
+++ b/include/cpp2regex.h
@@ -10,160 +10,160 @@
 
 #line 1 "regex.h2"
 
-#line 21 "regex.h2"
+#line 23 "regex.h2"
 namespace cpp2 {
 
 namespace regex {
 
-#line 37 "regex.h2"
+#line 39 "regex.h2"
 class expression_flags;
     
 
-#line 48 "regex.h2"
+#line 50 "regex.h2"
 template<typename Iter> class match_group;
     
 
-#line 57 "regex.h2"
+#line 59 "regex.h2"
 template<typename Iter> class match_return;
     
 
-#line 64 "regex.h2"
+#line 66 "regex.h2"
 template<typename CharT, typename Iter, int max_groups> class match_context;
 
-#line 126 "regex.h2"
+#line 128 "regex.h2"
 class true_end_func;
     
 
-#line 132 "regex.h2"
+#line 134 "regex.h2"
 class no_reset;
     
 
-#line 137 "regex.h2"
+#line 139 "regex.h2"
 template<typename Func> class on_return;
 
-#line 162 "regex.h2"
+#line 164 "regex.h2"
 template<typename CharT, CharT C> class single_class_entry;
 
-#line 170 "regex.h2"
+#line 172 "regex.h2"
 template<typename CharT, CharT Start, CharT End> class range_class_entry;
 
-#line 178 "regex.h2"
+#line 180 "regex.h2"
 template<typename CharT, typename ...List> class combined_class_entry;
     
 
-#line 185 "regex.h2"
+#line 187 "regex.h2"
 template<typename CharT, CharT ...List> class list_class_entry;
     
 
-#line 192 "regex.h2"
+#line 194 "regex.h2"
 template<typename CharT, string_util::fixed_string Name, typename Inner> class named_class_entry;
     
 
-#line 197 "regex.h2"
+#line 199 "regex.h2"
 template<typename CharT, typename Inner> class negated_class_entry;
     
 
-#line 204 "regex.h2"
+#line 206 "regex.h2"
 template<typename CharT, string_util::fixed_string Name, typename Inner> class shorthand_class_entry;
     
 
-#line 256 "regex.h2"
+#line 258 "regex.h2"
 class regex_token;
 
-#line 281 "regex.h2"
+#line 283 "regex.h2"
 class regex_token_check;
     
 
-#line 297 "regex.h2"
+#line 299 "regex.h2"
 class regex_token_code;
     
 
-#line 313 "regex.h2"
+#line 315 "regex.h2"
 class regex_token_empty;
     
 
-#line 327 "regex.h2"
+#line 329 "regex.h2"
 class regex_token_list;
     
 
-#line 367 "regex.h2"
+#line 369 "regex.h2"
 class parse_context_group_state;
 
-#line 428 "regex.h2"
+#line 430 "regex.h2"
 class parse_context_branch_reset_state;
     
 
-#line 469 "regex.h2"
+#line 471 "regex.h2"
 class parse_context;
     
 
-#line 851 "regex.h2"
+#line 853 "regex.h2"
 class generation_function_context;
     
 
-#line 868 "regex.h2"
+#line 870 "regex.h2"
 class generation_context;
 
-#line 1063 "regex.h2"
+#line 1065 "regex.h2"
 class alternative_token;
     
 
-#line 1077 "regex.h2"
+#line 1079 "regex.h2"
 class alternative_token_gen;
     
 
-#line 1122 "regex.h2"
+#line 1124 "regex.h2"
 template<typename CharT> class alternative_token_matcher;
 
-#line 1148 "regex.h2"
+#line 1150 "regex.h2"
 class any_token;
     
 
-#line 1175 "regex.h2"
+#line 1177 "regex.h2"
 class char_token;
     
 
-#line 1303 "regex.h2"
+#line 1305 "regex.h2"
 class class_token;
     
 
-#line 1438 "regex.h2"
+#line 1440 "regex.h2"
 template<typename CharT, bool negate, bool case_insensitive, typename ...List> class class_token_matcher;
 
-#line 1538 "regex.h2"
+#line 1540 "regex.h2"
 class group_ref_token;
     
 
-#line 1682 "regex.h2"
+#line 1684 "regex.h2"
 class group_token;
     
 
-#line 1966 "regex.h2"
+#line 1968 "regex.h2"
 class lookahead_token;
     
 
-#line 2068 "regex.h2"
+#line 2070 "regex.h2"
 class range_flags;
     
 
-#line 2076 "regex.h2"
+#line 2078 "regex.h2"
 class range_token;
     
 
-#line 2213 "regex.h2"
+#line 2215 "regex.h2"
 template<typename CharT, int min_count, int max_count, int kind> class range_token_matcher;
 
-#line 2338 "regex.h2"
+#line 2340 "regex.h2"
 class special_range_token;
     
 
-#line 2425 "regex.h2"
+#line 2427 "regex.h2"
 template<typename CharT, typename matcher_wrapper> class regular_expression;
 
-#line 2514 "regex.h2"
+#line 2516 "regex.h2"
 template<typename Error_out> class regex_generator;
 
-#line 2586 "regex.h2"
+#line 2588 "regex.h2"
 }
 }
 
@@ -188,10 +188,12 @@ template<typename Error_out> class regex_generator;
 
 template<typename matcher_wrapper, typename Iter, typename CharT>
 using matcher_wrapper_type = typename matcher_wrapper::template wrap<Iter, CharT>;
+template<typename matcher>
+using matcher_context_type = typename matcher::context;
 
 using error_func = std::function<void(std::string)>;
 
-#line 21 "regex.h2"
+#line 23 "regex.h2"
 namespace cpp2 {
 
 namespace regex {
@@ -199,7 +201,7 @@ namespace regex {
 template<typename CharT> using bview = std::basic_string_view<CharT>;
 template<typename CharT> using bstring = std::basic_string<CharT>;
 
-#line 37 "regex.h2"
+#line 39 "regex.h2"
 class expression_flags {
 private: cpp2::u8 _value; private: constexpr expression_flags(cpp2::impl::in<cpp2::i64> _val);
 
@@ -229,10 +231,10 @@ public: constexpr auto operator=(expression_flags&& that) noexcept -> expression
 public: [[nodiscard]] auto operator<=>(expression_flags const& that) const& -> std::strong_ordering = default;
 public: [[nodiscard]] auto to_string() const& -> std::string;
 
-#line 44 "regex.h2"
+#line 46 "regex.h2"
 };
 
-#line 48 "regex.h2"
+#line 50 "regex.h2"
 template<typename Iter> class match_group {
     public: Iter start {}; 
     public: Iter end {}; 
@@ -240,13 +242,13 @@ template<typename Iter> class match_group {
     public: bool matched {false}; 
 };
 
-#line 57 "regex.h2"
+#line 59 "regex.h2"
 template<typename Iter> class match_return {
     public: bool matched {false}; 
     public: Iter pos {}; 
 };
 
-#line 64 "regex.h2"
+#line 66 "regex.h2"
 template<typename CharT, typename Iter, int max_groups> class match_context
  {
     public: Iter begin; 
@@ -256,76 +258,76 @@ template<typename CharT, typename Iter, int max_groups> class match_context
 
     public: explicit match_context(Iter const& begin_, Iter const& end_);
 
-#line 76 "regex.h2"
+#line 78 "regex.h2"
     public: match_context(match_context const& that);
-#line 76 "regex.h2"
+#line 78 "regex.h2"
     public: auto operator=(match_context const& that) -> match_context& ;
-#line 76 "regex.h2"
+#line 78 "regex.h2"
     public: match_context(match_context&& that) noexcept;
-#line 76 "regex.h2"
+#line 78 "regex.h2"
     public: auto operator=(match_context&& that) noexcept -> match_context& ;
 
-#line 80 "regex.h2"
+#line 82 "regex.h2"
     public: [[nodiscard]] auto get_group(auto const& group) const& -> auto;
 
     public: [[nodiscard]] auto get_group_end(auto const& group) const& -> int;
 
-#line 88 "regex.h2"
+#line 90 "regex.h2"
     public: [[nodiscard]] auto get_group_start(auto const& group) const& -> int;
 
-#line 94 "regex.h2"
+#line 96 "regex.h2"
     public: [[nodiscard]] auto get_group_string(auto const& group) const& -> std::string;
 
-#line 101 "regex.h2"
+#line 103 "regex.h2"
     public: auto set_group_end(auto const& group, auto const& pos) & -> void;
 
-#line 106 "regex.h2"
+#line 108 "regex.h2"
     public: auto set_group_invalid(auto const& group) & -> void;
 
-#line 110 "regex.h2"
+#line 112 "regex.h2"
     public: auto set_group_start(auto const& group, auto const& pos) & -> void;
 
-#line 114 "regex.h2"
+#line 116 "regex.h2"
     public: [[nodiscard]] auto size() const& -> auto;
 
-#line 119 "regex.h2"
+#line 121 "regex.h2"
     public: [[nodiscard]] auto fail() const& -> auto;
     public: [[nodiscard]] auto pass(cpp2::impl::in<Iter> cur) const& -> auto;
 
 };
 
-#line 126 "regex.h2"
+#line 128 "regex.h2"
 class true_end_func {
     public: [[nodiscard]] auto operator()(auto const& cur, auto& ctx) const& -> auto;
 };
 
-#line 132 "regex.h2"
+#line 134 "regex.h2"
 class no_reset {
     public: auto operator()([[maybe_unused]] auto& unnamed_param_2) const& -> void;
 };
 
-#line 137 "regex.h2"
+#line 139 "regex.h2"
 template<typename Func> class on_return {
 
     private: Func func; 
 
     public: explicit on_return(Func const& f);
-#line 141 "regex.h2"
+#line 143 "regex.h2"
     public: auto operator=(Func const& f) -> on_return& ;
 
-#line 145 "regex.h2"
+#line 147 "regex.h2"
     public: ~on_return() noexcept;
     public: on_return(on_return const&) = delete; /* No 'that' constructor, suppress copy */
     public: auto operator=(on_return const&) -> void = delete;
 
 
-#line 148 "regex.h2"
+#line 150 "regex.h2"
 };
 
-#line 151 "regex.h2"
+#line 153 "regex.h2"
 template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> auto;
 
-#line 162 "regex.h2"
+#line 164 "regex.h2"
 template<typename CharT, CharT C> class single_class_entry
  {
     public: [[nodiscard]] static auto includes(cpp2::impl::in<CharT> c) -> auto;
@@ -334,10 +336,10 @@ template<typename CharT, CharT C> class single_class_entry
     public: single_class_entry(single_class_entry const&) = delete; /* No 'that' constructor, suppress copy */
     public: auto operator=(single_class_entry const&) -> void = delete;
 
-#line 166 "regex.h2"
+#line 168 "regex.h2"
 };
 
-#line 170 "regex.h2"
+#line 172 "regex.h2"
 template<typename CharT, CharT Start, CharT End> class range_class_entry
  {
     public: [[nodiscard]] static auto includes(cpp2::impl::in<CharT> c) -> auto;
@@ -346,10 +348,10 @@ template<typename CharT, CharT Start, CharT End> class range_class_entry
     public: range_class_entry(range_class_entry const&) = delete; /* No 'that' constructor, suppress copy */
     public: auto operator=(range_class_entry const&) -> void = delete;
 
-#line 174 "regex.h2"
+#line 176 "regex.h2"
 };
 
-#line 178 "regex.h2"
+#line 180 "regex.h2"
 template<typename CharT, typename ...List> class combined_class_entry {
     public: [[nodiscard]] static auto includes(cpp2::impl::in<CharT> c) -> auto;
     public: [[nodiscard]] static auto to_string() -> auto;
@@ -357,10 +359,10 @@ template<typename CharT, typename ...List> class combined_class_entry {
     public: combined_class_entry(combined_class_entry const&) = delete; /* No 'that' constructor, suppress copy */
     public: auto operator=(combined_class_entry const&) -> void = delete;
 
-#line 181 "regex.h2"
+#line 183 "regex.h2"
 };
 
-#line 185 "regex.h2"
+#line 187 "regex.h2"
 template<typename CharT, CharT ...List> class list_class_entry {
     public: [[nodiscard]] static auto includes(cpp2::impl::in<CharT> c) -> auto;
     public: [[nodiscard]] static auto to_string() -> auto;
@@ -368,10 +370,10 @@ template<typename CharT, CharT ...List> class list_class_entry {
     public: list_class_entry(list_class_entry const&) = delete; /* No 'that' constructor, suppress copy */
     public: auto operator=(list_class_entry const&) -> void = delete;
 
-#line 188 "regex.h2"
+#line 190 "regex.h2"
 };
 
-#line 192 "regex.h2"
+#line 194 "regex.h2"
 template<typename CharT, string_util::fixed_string Name, typename Inner> class named_class_entry {
     public: [[nodiscard]] static auto includes(cpp2::impl::in<CharT> c) -> auto;
     public: [[nodiscard]] static auto to_string() -> auto;
@@ -379,7 +381,7 @@ template<typename CharT, string_util::fixed_string Name, typename Inner> class n
     public: named_class_entry(named_class_entry const&) = delete; /* No 'that' constructor, suppress copy */
     public: auto operator=(named_class_entry const&) -> void = delete;
 
-#line 195 "regex.h2"
+#line 197 "regex.h2"
 };
 
 template<typename CharT, typename Inner> class negated_class_entry: public Inner {
@@ -389,10 +391,10 @@ template<typename CharT, typename Inner> class negated_class_entry: public Inner
     public: negated_class_entry(negated_class_entry const&) = delete; /* No 'that' constructor, suppress copy */
     public: auto operator=(negated_class_entry const&) -> void = delete;
 
-#line 200 "regex.h2"
+#line 202 "regex.h2"
 };
 
-#line 204 "regex.h2"
+#line 206 "regex.h2"
 template<typename CharT, string_util::fixed_string Name, typename Inner> class shorthand_class_entry {
     public: [[nodiscard]] static auto includes(cpp2::impl::in<CharT> c) -> auto;
     public: [[nodiscard]] static auto to_string() -> auto;
@@ -400,15 +402,15 @@ template<typename CharT, string_util::fixed_string Name, typename Inner> class s
     public: shorthand_class_entry(shorthand_class_entry const&) = delete; /* No 'that' constructor, suppress copy */
     public: auto operator=(shorthand_class_entry const&) -> void = delete;
 
-#line 207 "regex.h2"
+#line 209 "regex.h2"
 };
 
-#line 212 "regex.h2"
+#line 214 "regex.h2"
 template        <typename CharT> using digits_class = named_class_entry<CharT,"digits",range_class_entry<CharT,'0','9'>>;
 template        <typename CharT> using lower_class = named_class_entry<CharT,"lower",range_class_entry<CharT,'a','z'>>;
 template        <typename CharT> using upper_class = named_class_entry<CharT,"upper",range_class_entry<CharT,'A','Z'>>;
 
-#line 218 "regex.h2"
+#line 220 "regex.h2"
 template          <typename CharT> using alnum_class = named_class_entry<CharT,"alnum",combined_class_entry<CharT,lower_class<CharT>,upper_class<CharT>,digits_class<CharT>>>;
 template          <typename CharT> using alpha_class = named_class_entry<CharT,"alpha",combined_class_entry<CharT,lower_class<CharT>,upper_class<CharT>>>;
 template          <typename CharT> using ascii_class = named_class_entry<CharT,"ascii",range_class_entry<CharT,'\x00','\x7F'>>;
@@ -423,31 +425,31 @@ template<typename CharT> using ver_space_class = named_class_entry<CharT,"vspace
 template          <typename CharT> using word_class = named_class_entry<CharT,"word",combined_class_entry<CharT,alnum_class<CharT>,single_class_entry<CharT,'_'>>>;
 template          <typename CharT> using xdigit_class = named_class_entry<CharT,"xdigit",combined_class_entry<CharT,range_class_entry<CharT,'A','F'>,range_class_entry<CharT,'a','f'>,digits_class<CharT>>>;
 
-#line 234 "regex.h2"
+#line 236 "regex.h2"
 template                 <typename CharT> using short_digits_class = shorthand_class_entry<CharT,"\\d",digits_class<CharT>>;
 template                 <typename CharT> using short_hor_space_class = shorthand_class_entry<CharT,"\\h",hor_space_class<CharT>>;
 template                 <typename CharT> using short_space_class = shorthand_class_entry<CharT,"\\s",space_class<CharT>>;
 template<typename CharT> using short_vert_space_class = shorthand_class_entry<CharT,"\\v",ver_space_class<CharT>>;
 template                 <typename CharT> using short_word_class = shorthand_class_entry<CharT,"\\w",word_class<CharT>>;
 
-#line 241 "regex.h2"
+#line 243 "regex.h2"
 template                     <typename CharT> using short_not_digits_class = negated_class_entry<CharT,shorthand_class_entry<CharT,"\\D",digits_class<CharT>>>;
 template                     <typename CharT> using short_not_hor_space_class = negated_class_entry<CharT,shorthand_class_entry<CharT,"\\H",hor_space_class<CharT>>>;
 template                     <typename CharT> using short_not_space_class = negated_class_entry<CharT,shorthand_class_entry<CharT,"\\S",space_class<CharT>>>;
 template<typename CharT> using short_not_vert_space_class = negated_class_entry<CharT,shorthand_class_entry<CharT,"\\V",ver_space_class<CharT>>>;
 template                     <typename CharT> using short_not_word_class = negated_class_entry<CharT,shorthand_class_entry<CharT,"\\W",word_class<CharT>>>;
 
-#line 256 "regex.h2"
+#line 258 "regex.h2"
 class regex_token {
 
     public: std::string string_rep; 
 
     public: explicit regex_token(cpp2::impl::in<std::string> str);
 
-#line 264 "regex.h2"
+#line 266 "regex.h2"
     public: explicit regex_token();
 
-#line 269 "regex.h2"
+#line 271 "regex.h2"
     public: virtual auto generate_code([[maybe_unused]] generation_context& unnamed_param_2) const -> void = 0;
 
     public: virtual auto add_groups([[maybe_unused]] std::set<int>& unnamed_param_2) const -> void;
@@ -458,7 +460,7 @@ class regex_token {
     public: regex_token(regex_token const&) = delete; /* No 'that' constructor, suppress copy */
     public: auto operator=(regex_token const&) -> void = delete;
 
-#line 274 "regex.h2"
+#line 276 "regex.h2"
 };
 
 using token_ptr = std::shared_ptr<regex_token>;
@@ -468,12 +470,12 @@ using token_vec = std::vector<token_ptr>;
 //
 class regex_token_check: public regex_token {
 
-#line 284 "regex.h2"
+#line 286 "regex.h2"
     private: std::string check; 
 
     public: explicit regex_token_check(cpp2::impl::in<std::string> str, cpp2::impl::in<std::string> check_);
 
-#line 291 "regex.h2"
+#line 293 "regex.h2"
     public: auto generate_code(generation_context& ctx) const -> void override;
     public: virtual ~regex_token_check() noexcept;
 
@@ -481,18 +483,18 @@ class regex_token_check: public regex_token {
     public: auto operator=(regex_token_check const&) -> void = delete;
 
 
-#line 294 "regex.h2"
+#line 296 "regex.h2"
 };
 
 // Adds code in code generation.
 class regex_token_code: public regex_token {
 
-#line 300 "regex.h2"
+#line 302 "regex.h2"
     private: std::string code; 
 
     public: explicit regex_token_code(cpp2::impl::in<std::string> str, cpp2::impl::in<std::string> code_);
 
-#line 307 "regex.h2"
+#line 309 "regex.h2"
     public: auto generate_code(generation_context& ctx) const -> void override;
     public: virtual ~regex_token_code() noexcept;
 
@@ -500,16 +502,16 @@ class regex_token_code: public regex_token {
     public: auto operator=(regex_token_code const&) -> void = delete;
 
 
-#line 310 "regex.h2"
+#line 312 "regex.h2"
 };
 
 // Token that does not influence the matching. E.g. comment.
 class regex_token_empty: public regex_token {
 
-#line 316 "regex.h2"
+#line 318 "regex.h2"
     public: explicit regex_token_empty(cpp2::impl::in<std::string> str);
 
-#line 320 "regex.h2"
+#line 322 "regex.h2"
     public: auto generate_code([[maybe_unused]] generation_context& unnamed_param_2) const -> void override;
     public: virtual ~regex_token_empty() noexcept;
 
@@ -517,25 +519,25 @@ class regex_token_empty: public regex_token {
     public: auto operator=(regex_token_empty const&) -> void = delete;
 
 
-#line 323 "regex.h2"
+#line 325 "regex.h2"
 };
 
 // Represents a list of regex tokens as one token.
 //
 class regex_token_list: public regex_token {
 
-#line 330 "regex.h2"
+#line 332 "regex.h2"
     public: token_vec tokens; 
 
     public: explicit regex_token_list(cpp2::impl::in<token_vec> t);
 
-#line 337 "regex.h2"
+#line 339 "regex.h2"
     public: auto generate_code(generation_context& ctx) const -> void override;
 
-#line 343 "regex.h2"
+#line 345 "regex.h2"
     public: auto add_groups(std::set<int>& groups) const -> void override;
 
-#line 349 "regex.h2"
+#line 351 "regex.h2"
     public: [[nodiscard]] static auto gen_string(cpp2::impl::in<token_vec> vec) -> std::string;
     public: virtual ~regex_token_list() noexcept;
 
@@ -543,7 +545,7 @@ class regex_token_list: public regex_token {
     public: auto operator=(regex_token_list const&) -> void = delete;
 
 
-#line 356 "regex.h2"
+#line 358 "regex.h2"
 };
 
 //-----------------------------------------------------------------------
@@ -557,7 +559,7 @@ class regex_token_list: public regex_token {
 //
 class parse_context_group_state {
 
-#line 370 "regex.h2"
+#line 372 "regex.h2"
     public: token_vec cur_match_list {};           // Current list of matchers.
     public: token_vec alternate_match_lists {};    // List of alternate matcher lists. E.g. ab|cd|xy.
     public: expression_flags modifiers {};         // Current modifiers for the group/regular expression.
@@ -565,27 +567,27 @@ class parse_context_group_state {
     // Start a new alternative.
     public: auto next_alternative() & -> void;
 
-#line 382 "regex.h2"
+#line 384 "regex.h2"
     // Swap this state with the other one.
     public: auto swap(parse_context_group_state& t) & -> void;
 
-#line 389 "regex.h2"
+#line 391 "regex.h2"
     // Convert this state into a regex token.
     public: [[nodiscard]] auto get_as_token() & -> token_ptr;
 
-#line 401 "regex.h2"
+#line 403 "regex.h2"
     // Add a token to the current matcher list.
     public: auto add(cpp2::impl::in<token_ptr> token) & -> void;
 
-#line 406 "regex.h2"
+#line 408 "regex.h2"
     // True if current matcher list is empty.
     public: [[nodiscard]] auto empty() const& -> bool;
 
-#line 410 "regex.h2"
+#line 412 "regex.h2"
     // Apply optimizations to the matcher list.
     public: static auto post_process_list(token_vec& list) -> void;
 
-#line 424 "regex.h2"
+#line 426 "regex.h2"
 };
 
 // State for the branch reset. Takes care of the group numbering. See '(|<pattern>)'.
@@ -599,19 +601,19 @@ class parse_context_branch_reset_state {
     // Next group identifier.
     public: [[nodiscard]] auto next() & -> int;
 
-#line 443 "regex.h2"
+#line 445 "regex.h2"
     // Set next group identifier.
     public: auto set_next(cpp2::impl::in<int> g) & -> void;
 
-#line 449 "regex.h2"
+#line 451 "regex.h2"
     // Start a new alternative branch.
     public: auto next_alternative() & -> void;
 
-#line 456 "regex.h2"
+#line 458 "regex.h2"
     // Initialize for a branch reset group.
     public: auto set_active_reset(cpp2::impl::in<int> restart) & -> void;
 
-#line 463 "regex.h2"
+#line 465 "regex.h2"
 };
 
 // Context during parsing of the regular expressions.
@@ -626,7 +628,7 @@ class parse_context {
     private: parse_context_group_state cur_group_state {}; 
     private: parse_context_branch_reset_state cur_branch_reset_state {}; 
 
-#line 478 "regex.h2"
+#line 480 "regex.h2"
            public: std::map<std::string,int> named_groups {}; 
 
     private: error_func error_out; // TODO: Declaring std::function<void(std::string)> fails for cpp2.
@@ -634,66 +636,66 @@ class parse_context {
 
     public: explicit parse_context(cpp2::impl::in<std::string_view> r, auto const& e);
 
-#line 489 "regex.h2"
+#line 491 "regex.h2"
     // State management functions
     //
 
     // Returned group state needs to be stored and provided in `end_group`.
     public: [[nodiscard]] auto start_group() & -> parse_context_group_state;
 
-#line 501 "regex.h2"
+#line 503 "regex.h2"
     // `old_state` argument needs to be from start group.
     public: [[nodiscard]] auto end_group(cpp2::impl::in<parse_context_group_state> old_state) & -> token_ptr;
 
-#line 508 "regex.h2"
+#line 510 "regex.h2"
     public: [[nodiscard]] auto get_modifiers() const& -> expression_flags;
 
-#line 512 "regex.h2"
+#line 514 "regex.h2"
     public: auto set_modifiers(cpp2::impl::in<expression_flags> mod) & -> void;
 
-#line 516 "regex.h2"
+#line 518 "regex.h2"
     // Branch reset management functions
     //
 
     public: [[nodiscard]] auto branch_reset_new_state() & -> parse_context_branch_reset_state;
 
-#line 527 "regex.h2"
+#line 529 "regex.h2"
     public: auto branch_reset_restore_state(cpp2::impl::in<parse_context_branch_reset_state> old_state) & -> void;
 
-#line 533 "regex.h2"
+#line 535 "regex.h2"
     public: auto next_alternative() & -> void;
 
-#line 538 "regex.h2"
+#line 540 "regex.h2"
     // Regex token management
     //
 
     public: auto add_token(cpp2::impl::in<token_ptr> token) & -> void;
 
-#line 545 "regex.h2"
+#line 547 "regex.h2"
     public: [[nodiscard]] auto has_token() const& -> bool;
 
-#line 549 "regex.h2"
+#line 551 "regex.h2"
     public: [[nodiscard]] auto pop_token() & -> token_ptr;
 
-#line 559 "regex.h2"
+#line 561 "regex.h2"
     public: [[nodiscard]] auto get_as_token() & -> token_ptr;
 
-#line 563 "regex.h2"
+#line 565 "regex.h2"
     // Group management
     //
 
     public: [[nodiscard]] auto get_cur_group() const& -> int;
 
-#line 570 "regex.h2"
+#line 572 "regex.h2"
     public: [[nodiscard]] auto next_group() & -> int;
 
-#line 574 "regex.h2"
+#line 576 "regex.h2"
     public: auto set_named_group(cpp2::impl::in<std::string> name, cpp2::impl::in<int> id) & -> void;
 
-#line 580 "regex.h2"
+#line 582 "regex.h2"
     public: [[nodiscard]] auto get_named_group(cpp2::impl::in<std::string> name) const& -> int;
 
-#line 590 "regex.h2"
+#line 592 "regex.h2"
     // Position management functions
     //
 
@@ -702,36 +704,36 @@ class parse_context {
     // Get the next token in the regex, skipping spaces according to the parameters. See `x` and `xx` modifiers.
     private: [[nodiscard]] auto get_next_position(cpp2::impl::in<bool> in_class, cpp2::impl::in<bool> no_skip) const& -> size_t;
 
-#line 634 "regex.h2"
+#line 636 "regex.h2"
     // Return true if next token is available.
     private: [[nodiscard]] auto next_impl(cpp2::impl::in<bool> in_class, cpp2::impl::in<bool> no_skip) & -> bool;
 
-#line 645 "regex.h2"
+#line 647 "regex.h2"
     public: [[nodiscard]] auto next() & -> auto;
     public: [[nodiscard]] auto next_in_class() & -> auto;
     public: [[nodiscard]] auto next_no_skip() & -> auto;
 
     public: [[nodiscard]] auto next_n(cpp2::impl::in<int> n) & -> bool;
 
-#line 658 "regex.h2"
+#line 660 "regex.h2"
     public: [[nodiscard]] auto has_next() const& -> bool;
 
     private: [[nodiscard]] auto grab_until_impl(cpp2::impl::in<std::string> e, cpp2::impl::out<std::string> r, cpp2::impl::in<bool> any) & -> bool;
 
-#line 680 "regex.h2"
+#line 682 "regex.h2"
     public: [[nodiscard]] auto grab_until(cpp2::impl::in<std::string> e, cpp2::impl::out<std::string> r) & -> auto;
     public: [[nodiscard]] auto grab_until(cpp2::impl::in<char> e, cpp2::impl::out<std::string> r) & -> auto;
     public: [[nodiscard]] auto grab_until_one_of(cpp2::impl::in<std::string> e, cpp2::impl::out<std::string> r) & -> auto;
 
     public: [[nodiscard]] auto grab_n(cpp2::impl::in<int> n, cpp2::impl::out<std::string> r) & -> bool;
 
-#line 696 "regex.h2"
+#line 698 "regex.h2"
     public: [[nodiscard]] auto grab_number() & -> std::string;
 
-#line 716 "regex.h2"
+#line 718 "regex.h2"
     private: [[nodiscard]] auto peek_impl(cpp2::impl::in<bool> in_class) const& -> char;
 
-#line 726 "regex.h2"
+#line 728 "regex.h2"
     public: [[nodiscard]] auto peek() const& -> auto;
     public: [[nodiscard]] auto peek_in_class() const& -> auto;
 
@@ -740,17 +742,17 @@ class parse_context {
 
     public: [[nodiscard]] auto parser_group_modifiers(cpp2::impl::in<std::string> change_str, expression_flags& parser_modifiers) & -> bool;
 
-#line 784 "regex.h2"
+#line 786 "regex.h2"
     public: [[nodiscard]] auto parse_until(cpp2::impl::in<char> term) & -> bool;
 
-#line 821 "regex.h2"
+#line 823 "regex.h2"
     public: [[nodiscard]] auto parse(cpp2::impl::in<std::string> modifiers) & -> bool;
 
-#line 835 "regex.h2"
+#line 837 "regex.h2"
     // Misc functions
 
     public: [[nodiscard]] auto get_pos() const& -> auto;
-    public: [[nodiscard]] auto get_range(cpp2::impl::in<int> start, cpp2::impl::in<int> end) const& -> auto;
+    public: [[nodiscard]] auto get_range(cpp2::impl::in<size_t> start, cpp2::impl::in<size_t> end) const& -> auto;
     public: [[nodiscard]] auto valid() const& -> bool;
 
     public: [[nodiscard]] auto error(cpp2::impl::in<std::string> err) & -> token_ptr;
@@ -758,7 +760,7 @@ class parse_context {
     public: auto operator=(parse_context const&) -> void = delete;
 
 
-#line 846 "regex.h2"
+#line 848 "regex.h2"
 };
 
 // Context for one function generation. Generation of functions can be interleaved, therefore we buffer the code for one
@@ -770,10 +772,10 @@ class generation_function_context {
 
     public: auto add_tabs(cpp2::impl::in<int> c) & -> void;
 
-#line 862 "regex.h2"
+#line 864 "regex.h2"
     public: auto remove_tabs(cpp2::impl::in<int> c) & -> void;
 
-#line 865 "regex.h2"
+#line 867 "regex.h2"
 };
 
 // Context for generating the state machine.
@@ -796,71 +798,71 @@ class generation_context {
     // Add code line.
     public: auto add(cpp2::impl::in<std::string> s) & -> void;
 
-#line 890 "regex.h2"
+#line 892 "regex.h2"
     // Add check for token. The check needs to be a function call that returns a boolean.
     public: auto add_check(cpp2::impl::in<std::string> check) & -> void;
 
-#line 896 "regex.h2"
+#line 898 "regex.h2"
     // Add a statefull check. The check needs to return a `match_return`.
     public: auto add_statefull(cpp2::impl::in<std::string> next_func, cpp2::impl::in<std::string> check) & -> void;
 
-#line 904 "regex.h2"
+#line 906 "regex.h2"
     protected: auto start_func_named(cpp2::impl::in<std::string> name) & -> void;
 
-#line 914 "regex.h2"
+#line 916 "regex.h2"
     protected: [[nodiscard]] auto start_func() & -> std::string;
 
-#line 920 "regex.h2"
+#line 922 "regex.h2"
     protected: auto end_func_statefull(cpp2::impl::in<std::string> s) & -> void;
 
-#line 938 "regex.h2"
+#line 940 "regex.h2"
     // Generate the function for a token.
     public: [[nodiscard]] auto generate_func(cpp2::impl::in<token_ptr> token) & -> std::string;
 
-#line 947 "regex.h2"
+#line 949 "regex.h2"
     // Generate the reset for a list of group identifiers.
     public: [[nodiscard]] auto generate_reset(cpp2::impl::in<std::set<int>> groups) & -> std::string;
 
-#line 969 "regex.h2"
+#line 971 "regex.h2"
     // Name generation
     //
 
     protected: [[nodiscard]] auto gen_func_name() & -> std::string;
 
-#line 978 "regex.h2"
+#line 980 "regex.h2"
     public: [[nodiscard]] auto next_func_name() & -> std::string;
 
-#line 982 "regex.h2"
+#line 984 "regex.h2"
     protected: [[nodiscard]] auto gen_reset_func_name() & -> std::string;
 
-#line 988 "regex.h2"
+#line 990 "regex.h2"
     public: [[nodiscard]] auto gen_temp() & -> std::string;
 
-#line 994 "regex.h2"
+#line 996 "regex.h2"
     // Context management
     //
 
     public: [[nodiscard]] auto new_context() & -> generation_function_context*;
 
-#line 1005 "regex.h2"
+#line 1007 "regex.h2"
     public: auto finish_context() & -> void;
 
-#line 1013 "regex.h2"
+#line 1015 "regex.h2"
     // Misc functions
     //
 
     private: [[nodiscard]] auto get_current() & -> generation_function_context*;
 
-#line 1020 "regex.h2"
+#line 1022 "regex.h2"
     private: [[nodiscard]] auto get_base() & -> generation_function_context*;
 
-#line 1024 "regex.h2"
+#line 1026 "regex.h2"
     public: [[nodiscard]] auto get_entry_func() const& -> std::string;
 
-#line 1028 "regex.h2"
+#line 1030 "regex.h2"
     public: [[nodiscard]] auto create_named_group_lookup(cpp2::impl::in<std::map<std::string,int>> named_groups) const& -> std::string;
 
-#line 1051 "regex.h2"
+#line 1053 "regex.h2"
     // Run the generation for the token.
     public: [[nodiscard]] auto run(cpp2::impl::in<token_ptr> token) & -> std::string;
     public: generation_context() = default;
@@ -868,7 +870,7 @@ class generation_context {
     public: auto operator=(generation_context const&) -> void = delete;
 
 
-#line 1057 "regex.h2"
+#line 1059 "regex.h2"
 };
 
 //  Regex syntax: |  Example: ab|ba
@@ -887,23 +889,23 @@ class alternative_token: public regex_token_empty {
     public: auto operator=(alternative_token const&) -> void = delete;
 
 
-#line 1075 "regex.h2"
+#line 1077 "regex.h2"
 };
 
 class alternative_token_gen: public regex_token {
 
-#line 1080 "regex.h2"
+#line 1082 "regex.h2"
     private: token_vec alternatives; 
 
     public: explicit alternative_token_gen(cpp2::impl::in<token_vec> a);
 
-#line 1087 "regex.h2"
+#line 1089 "regex.h2"
     public: auto generate_code(generation_context& ctx) const -> void override;
 
-#line 1103 "regex.h2"
+#line 1105 "regex.h2"
     public: auto add_groups(std::set<int>& groups) const -> void override;
 
-#line 1109 "regex.h2"
+#line 1111 "regex.h2"
     public: [[nodiscard]] static auto gen_string(cpp2::impl::in<token_vec> a) -> std::string;
     public: virtual ~alternative_token_gen() noexcept;
 
@@ -911,31 +913,31 @@ class alternative_token_gen: public regex_token {
     public: auto operator=(alternative_token_gen const&) -> void = delete;
 
 
-#line 1120 "regex.h2"
+#line 1122 "regex.h2"
 };
 
 template<typename CharT> class alternative_token_matcher {
 
     public: [[nodiscard]] static auto match(auto const& cur, auto& ctx, auto const& end_func, auto const& tail, auto const& ...functions) -> auto;
 
-#line 1127 "regex.h2"
+#line 1129 "regex.h2"
     private: template<typename ...Other> [[nodiscard]] static auto match_first(auto const& cur, auto& ctx, auto const& end_func, auto const& tail, auto const& cur_func, auto const& cur_reset, Other const& ...other) -> auto;
     public: alternative_token_matcher() = default;
     public: alternative_token_matcher(alternative_token_matcher const&) = delete; /* No 'that' constructor, suppress copy */
     public: auto operator=(alternative_token_matcher const&) -> void = delete;
 
 
-#line 1144 "regex.h2"
+#line 1146 "regex.h2"
 };
 
 //  Regex syntax: .
 //
 class any_token: public regex_token_check {
 
-#line 1151 "regex.h2"
+#line 1153 "regex.h2"
     public: explicit any_token(cpp2::impl::in<bool> single_line);
 
-#line 1155 "regex.h2"
+#line 1157 "regex.h2"
     public: [[nodiscard]] static auto parse(parse_context& ctx) -> token_ptr;
     public: virtual ~any_token() noexcept;
 
@@ -943,38 +945,38 @@ class any_token: public regex_token_check {
     public: auto operator=(any_token const&) -> void = delete;
 
 
-#line 1160 "regex.h2"
+#line 1162 "regex.h2"
 };
 
 template<typename CharT, bool single_line> [[nodiscard]] auto any_token_matcher(auto& cur, auto& ctx) -> bool;
 
-#line 1173 "regex.h2"
+#line 1175 "regex.h2"
 // Regex syntax: a
 //
 class char_token: public regex_token {
 
-#line 1178 "regex.h2"
+#line 1180 "regex.h2"
     private: std::string token; 
     private: bool ignore_case; 
 
     public: explicit char_token(cpp2::impl::in<char> t, cpp2::impl::in<bool> ignore_case_);
 
-#line 1187 "regex.h2"
+#line 1189 "regex.h2"
     public: [[nodiscard]] static auto parse(parse_context& ctx) -> token_ptr;
 
-#line 1191 "regex.h2"
+#line 1193 "regex.h2"
     public: auto generate_code(generation_context& ctx) const -> void override;
 
-#line 1213 "regex.h2"
+#line 1215 "regex.h2"
     public: auto gen_case_insensitive(cpp2::impl::in<std::string> lower, cpp2::impl::in<std::string> upper, generation_context& ctx) const& -> void;
 
-#line 1233 "regex.h2"
+#line 1235 "regex.h2"
     public: auto gen_case_sensitive(generation_context& ctx) const& -> void;
 
-#line 1250 "regex.h2"
+#line 1252 "regex.h2"
     public: [[nodiscard]] auto add_escapes(std::string str) const& -> std::string;
 
-#line 1262 "regex.h2"
+#line 1264 "regex.h2"
     public: auto append(char_token const& that) & -> void;
     public: virtual ~char_token() noexcept;
 
@@ -982,7 +984,7 @@ class char_token: public regex_token {
     public: auto operator=(char_token const&) -> void = delete;
 
 
-#line 1266 "regex.h2"
+#line 1268 "regex.h2"
 };
 
 // TODO: Check if vectorization works at some point with this implementation.
@@ -1022,21 +1024,21 @@ class char_token: public regex_token {
 //
 class class_token: public regex_token {
 
-#line 1306 "regex.h2"
+#line 1308 "regex.h2"
     private: bool negate; 
     private: bool case_insensitive; 
     private: std::string class_str; 
 
     public: explicit class_token(cpp2::impl::in<bool> negate_, cpp2::impl::in<bool> case_insensitive_, cpp2::impl::in<std::string> class_str_, cpp2::impl::in<std::string> str);
 
-#line 1317 "regex.h2"
+#line 1319 "regex.h2"
     // TODO: Rework class generation: Generate check functions for classes.
     public: [[nodiscard]] static auto parse(parse_context& ctx) -> token_ptr;
 
-#line 1425 "regex.h2"
+#line 1427 "regex.h2"
     public: auto generate_code(generation_context& ctx) const -> void override;
 
-#line 1430 "regex.h2"
+#line 1432 "regex.h2"
     private: [[nodiscard]] static auto create_matcher(cpp2::impl::in<std::string> name, cpp2::impl::in<std::string> template_arguments) -> std::string;
     public: virtual ~class_token() noexcept;
 
@@ -1044,21 +1046,21 @@ class class_token: public regex_token {
     public: auto operator=(class_token const&) -> void = delete;
 
 
-#line 1436 "regex.h2"
+#line 1438 "regex.h2"
 };
 
 template<typename CharT, bool negate, bool case_insensitive, typename ...List> class class_token_matcher
  {
     public: [[nodiscard]] static auto match(auto& cur, auto& ctx) -> bool;
 
-#line 1461 "regex.h2"
+#line 1463 "regex.h2"
     private: template<typename First, typename ...Other> [[nodiscard]] static auto match_any(cpp2::impl::in<CharT> c) -> bool;
     public: class_token_matcher() = default;
     public: class_token_matcher(class_token_matcher const&) = delete; /* No 'that' constructor, suppress copy */
     public: auto operator=(class_token_matcher const&) -> void = delete;
 
 
-#line 1473 "regex.h2"
+#line 1475 "regex.h2"
     // TODO: Implement proper to string
     // to_string: () -> bstring<CharT> = {
     //     r: bstring<CharT> = "[";
@@ -1070,19 +1072,19 @@ template<typename CharT, bool negate, bool case_insensitive, typename ...List> c
 
     //     return r;
     // }
-#line 1484 "regex.h2"
+#line 1486 "regex.h2"
 };
 
 // Regex syntax: \a or \n or \[
 //
 [[nodiscard]] auto escape_token_parse(parse_context& ctx) -> token_ptr;
 
-#line 1523 "regex.h2"
+#line 1525 "regex.h2"
 // Regex syntax: \K Example: ab\Kcd
 //
 [[nodiscard]] auto global_group_reset_token_parse(parse_context& ctx) -> token_ptr;
 
-#line 1532 "regex.h2"
+#line 1534 "regex.h2"
 // Regex syntax: \<number>  Example: \1
 //               \g{name_or_number}
 //               \k{name_or_number}
@@ -1091,16 +1093,16 @@ template<typename CharT, bool negate, bool case_insensitive, typename ...List> c
 //
 class group_ref_token: public regex_token {
 
-#line 1541 "regex.h2"
+#line 1543 "regex.h2"
     private: int id; 
     private: bool case_insensitive; 
 
     public: explicit group_ref_token(cpp2::impl::in<int> id_, cpp2::impl::in<bool> case_insensitive_, cpp2::impl::in<std::string> str);
 
-#line 1550 "regex.h2"
+#line 1552 "regex.h2"
     public: [[nodiscard]] static auto parse(parse_context& ctx) -> token_ptr;
 
-#line 1642 "regex.h2"
+#line 1644 "regex.h2"
     public: auto generate_code(generation_context& ctx) const -> void override;
     public: virtual ~group_ref_token() noexcept;
 
@@ -1108,12 +1110,12 @@ class group_ref_token: public regex_token {
     public: auto operator=(group_ref_token const&) -> void = delete;
 
 
-#line 1645 "regex.h2"
+#line 1647 "regex.h2"
 };
 
 template<typename CharT, int group, bool case_insensitive> [[nodiscard]] auto group_ref_token_matcher(auto& cur, auto& ctx) -> bool;
 
-#line 1672 "regex.h2"
+#line 1674 "regex.h2"
 // Regex syntax: (<tokens>)      Example: (abc)
 //               (?<modifiers)            (?i)
 //               (?<modifiers>:<tokens>)  (?i:abc)
@@ -1126,22 +1128,22 @@ template<typename CharT, int group, bool case_insensitive> [[nodiscard]] auto gr
 //
 class group_token: public regex_token {
 
-#line 1685 "regex.h2"
+#line 1687 "regex.h2"
     private: int number {-1}; 
     private: token_ptr inner {nullptr}; 
 
     public: [[nodiscard]] static auto parse_lookahead(parse_context& ctx, cpp2::impl::in<std::string> syntax, cpp2::impl::in<bool> positive) -> token_ptr;
 
-#line 1701 "regex.h2"
+#line 1703 "regex.h2"
     public: [[nodiscard]] static auto parse(parse_context& ctx) -> token_ptr;
 
-#line 1828 "regex.h2"
+#line 1830 "regex.h2"
     public: [[nodiscard]] static auto gen_string(cpp2::impl::in<std::string> name, cpp2::impl::in<bool> name_brackets, cpp2::impl::in<bool> has_modifier, cpp2::impl::in<std::string> modifiers, cpp2::impl::in<token_ptr> inner_) -> std::string;
 
-#line 1845 "regex.h2"
+#line 1847 "regex.h2"
     public: auto generate_code(generation_context& ctx) const -> void override;
 
-#line 1864 "regex.h2"
+#line 1866 "regex.h2"
     public: auto add_groups(std::set<int>& groups) const -> void override;
     public: virtual ~group_token() noexcept;
 
@@ -1150,46 +1152,46 @@ class group_token: public regex_token {
     public: auto operator=(group_token const&) -> void = delete;
 
 
-#line 1870 "regex.h2"
+#line 1872 "regex.h2"
 };
 
 // Regex syntax: \x<number> or \x{<number>}  Example: \x{62}
 //
 [[nodiscard]] auto hexadecimal_token_parse(parse_context& ctx) -> token_ptr;
 
-#line 1913 "regex.h2"
+#line 1915 "regex.h2"
 // Regex syntax: $  Example: aa$
 //
 [[nodiscard]] auto line_end_token_parse(parse_context& ctx) -> token_ptr;
 
-#line 1931 "regex.h2"
+#line 1933 "regex.h2"
 template<typename CharT, bool match_new_line, bool match_new_line_before_end> [[nodiscard]] auto line_end_token_matcher(auto const& cur, auto& ctx) -> bool;
 
-#line 1943 "regex.h2"
+#line 1945 "regex.h2"
 // Regex syntax: ^  Example: ^aa
 //
 [[nodiscard]] auto line_start_token_parse(parse_context& ctx) -> token_ptr;
 
-#line 1957 "regex.h2"
+#line 1959 "regex.h2"
 template<typename CharT, bool match_new_line> [[nodiscard]] auto line_start_token_matcher(auto const& cur, auto& ctx) -> bool;
 
-#line 1962 "regex.h2"
+#line 1964 "regex.h2"
 // Regex syntax: (?=) or (?!) or (*pla), etc.  Example: (?=AA)
 //
 // Parsed in group_token.
 //
 class lookahead_token: public regex_token {
 
-#line 1969 "regex.h2"
+#line 1971 "regex.h2"
     protected: bool positive; 
     public: token_ptr inner {nullptr}; 
 
     public: explicit lookahead_token(cpp2::impl::in<bool> positive_);
 
-#line 1976 "regex.h2"
+#line 1978 "regex.h2"
     public: auto generate_code(generation_context& ctx) const -> void override;
 
-#line 1982 "regex.h2"
+#line 1984 "regex.h2"
     public: auto add_groups(std::set<int>& groups) const -> void override;
     public: virtual ~lookahead_token() noexcept;
 
@@ -1197,18 +1199,18 @@ class lookahead_token: public regex_token {
     public: auto operator=(lookahead_token const&) -> void = delete;
 
 
-#line 1985 "regex.h2"
+#line 1987 "regex.h2"
 };
 
 template<typename CharT, bool positive> [[nodiscard]] auto lookahead_token_matcher(auto const& cur, auto& ctx, auto const& func) -> bool;
 
-#line 1996 "regex.h2"
+#line 1998 "regex.h2"
 // Named character classes
 //
 
 [[nodiscard]] auto named_class_token_parse(parse_context& ctx) -> token_ptr;
 
-#line 2023 "regex.h2"
+#line 2025 "regex.h2"
 template<typename CharT, bool case_insensitive> using named_class_no_new_line = class_token_matcher<CharT,true,case_insensitive,single_class_entry<CharT,'\n'>>;
 template                 <typename CharT,          bool case_insensitive> using named_class_digits = class_token_matcher<CharT,false,case_insensitive,digits_class<CharT>>;
 template                 <typename CharT,          bool case_insensitive> using named_class_hor_space = class_token_matcher<CharT,false,case_insensitive,hor_space_class<CharT>>;
@@ -1222,12 +1224,12 @@ template                    <typename CharT,          bool case_insensitive> usi
 template<typename CharT, bool case_insensitive> using named_class_not_ver_space = class_token_matcher<CharT,true,case_insensitive,ver_space_class<CharT>>;
 template                    <typename CharT,          bool case_insensitive> using named_class_not_word = class_token_matcher<CharT,true,case_insensitive,word_class<CharT>>;
 
-#line 2037 "regex.h2"
+#line 2039 "regex.h2"
 // Regex syntax: \o{<number>}  Example: \o{142}
 //
 [[nodiscard]] auto octal_token_parse(parse_context& ctx) -> token_ptr;
 
-#line 2063 "regex.h2"
+#line 2065 "regex.h2"
 // TODO: @enum as template parameter yields two error:
 //     error: type 'range_flags' of non-type template parameter is not a structural type
 //     error: non-type template parameter has incomplete type 'range_flags'
@@ -1242,13 +1244,13 @@ class range_flags {
     public: range_flags(range_flags const&) = delete; /* No 'that' constructor, suppress copy */
     public: auto operator=(range_flags const&) -> void = delete;
 };
-#line 2073 "regex.h2"
+#line 2075 "regex.h2"
 
 // Regex syntax: <matcher>{min, max}  Example: a{2,4}
 //
 class range_token: public regex_token {
 
-#line 2079 "regex.h2"
+#line 2081 "regex.h2"
     protected: int min_count {-1}; 
     protected: int max_count {-1}; 
     protected: int kind {range_flags::greedy}; 
@@ -1258,19 +1260,19 @@ class range_token: public regex_token {
 
     public: [[nodiscard]] static auto parse(parse_context& ctx) -> token_ptr;
 
-#line 2156 "regex.h2"
+#line 2158 "regex.h2"
     public: auto parse_modifier(parse_context& ctx) & -> void;
 
-#line 2167 "regex.h2"
+#line 2169 "regex.h2"
     public: [[nodiscard]] auto gen_mod_string() const& -> std::string;
 
-#line 2179 "regex.h2"
+#line 2181 "regex.h2"
     public: [[nodiscard]] auto gen_range_string() const& -> std::string;
 
-#line 2197 "regex.h2"
+#line 2199 "regex.h2"
     public: auto generate_code(generation_context& ctx) const -> void override;
 
-#line 2207 "regex.h2"
+#line 2209 "regex.h2"
     public: auto add_groups(std::set<int>& groups) const -> void override;
     public: virtual ~range_token() noexcept;
 
@@ -1278,46 +1280,46 @@ class range_token: public regex_token {
     public: auto operator=(range_token const&) -> void = delete;
 
 
-#line 2211 "regex.h2"
+#line 2213 "regex.h2"
 };
 
 template<typename CharT, int min_count, int max_count, int kind> class range_token_matcher {
 
     public: template<typename Iter> [[nodiscard]] static auto match(Iter const& cur, auto& ctx, auto const& inner, auto const& reset_func, auto const& end_func, auto const& tail) -> auto;
 
-#line 2227 "regex.h2"
+#line 2229 "regex.h2"
     private: [[nodiscard]] static auto is_below_upper_bound(cpp2::impl::in<int> count) -> bool;
 
-#line 2232 "regex.h2"
+#line 2234 "regex.h2"
     private: [[nodiscard]] static auto is_below_lower_bound(cpp2::impl::in<int> count) -> bool;
 
-#line 2237 "regex.h2"
+#line 2239 "regex.h2"
     private: [[nodiscard]] static auto is_in_range(cpp2::impl::in<int> count) -> bool;
 
-#line 2243 "regex.h2"
+#line 2245 "regex.h2"
     private: template<typename Iter> [[nodiscard]] static auto match_min_count(Iter const& cur, auto& ctx, auto const& inner, auto const& end_func, int& count_r) -> auto;
 
-#line 2258 "regex.h2"
+#line 2260 "regex.h2"
     private: template<typename Iter> [[nodiscard]] static auto match_greedy(cpp2::impl::in<int> count, Iter const& cur, Iter const& last_valid, auto& ctx, auto const& inner, auto const& reset_func, auto const& end_func, auto const& other) -> match_return<Iter>;
 
-#line 2286 "regex.h2"
+#line 2288 "regex.h2"
     private: template<typename Iter> [[nodiscard]] static auto match_possessive(Iter const& cur, auto& ctx, auto const& inner, auto const& end_func, auto const& other) -> match_return<Iter>;
 
-#line 2310 "regex.h2"
+#line 2312 "regex.h2"
     private: template<typename Iter> [[nodiscard]] static auto match_not_greedy(Iter const& cur, auto& ctx, auto const& inner, auto const& end_func, auto const& other) -> match_return<Iter>;
     public: range_token_matcher() = default;
     public: range_token_matcher(range_token_matcher const&) = delete; /* No 'that' constructor, suppress copy */
     public: auto operator=(range_token_matcher const&) -> void = delete;
 
 
-#line 2334 "regex.h2"
+#line 2336 "regex.h2"
 };
 
 // Regex syntax: *, +, or ?  Example: aa*
 //
 class special_range_token: public range_token {
 
-#line 2341 "regex.h2"
+#line 2343 "regex.h2"
     public: [[nodiscard]] static auto parse(parse_context& ctx) -> token_ptr;
     public: virtual ~special_range_token() noexcept;
 
@@ -1326,7 +1328,7 @@ class special_range_token: public range_token {
     public: auto operator=(special_range_token const&) -> void = delete;
 
 
-#line 2370 "regex.h2"
+#line 2372 "regex.h2"
 };
 
 // Regex syntax: \b or \B  Example: \bword\b
@@ -1335,10 +1337,10 @@ class special_range_token: public range_token {
 //
 [[nodiscard]] auto word_boundary_token_parse(parse_context& ctx) -> token_ptr;
 
-#line 2392 "regex.h2"
+#line 2394 "regex.h2"
 template<typename CharT, bool negate> [[nodiscard]] auto word_boundary_token_matcher(auto& cur, auto& ctx) -> bool;
 
-#line 2417 "regex.h2"
+#line 2419 "regex.h2"
 //-----------------------------------------------------------------------
 //
 //  Regular expression implementation.
@@ -1350,7 +1352,7 @@ template<typename CharT, bool negate> [[nodiscard]] auto word_boundary_token_mat
 template<typename CharT, typename matcher_wrapper> class regular_expression {
 
     public: template<typename Iter> using matcher = matcher_wrapper_type<matcher_wrapper,Iter,CharT>;// TODO: Remove when nested types are allowed: https://github.com/hsutter/cppfront/issues/727
-    public: template<typename Iter> using context = matcher<Iter>::context;
+    public: template<typename Iter> using context = matcher_context_type<matcher<Iter>>;// TODO: Remove when nested types are allowed: https://github.com/hsutter/cppfront/issues/727
 
     public: template<typename Iter> class search_return {
         public: bool matched; 
@@ -1359,7 +1361,7 @@ template<typename CharT, typename matcher_wrapper> class regular_expression {
 
         public: explicit search_return(cpp2::impl::in<bool> matched_, context<Iter> const& ctx_, Iter const& pos_);
 
-#line 2441 "regex.h2"
+#line 2443 "regex.h2"
         public: [[nodiscard]] auto group_number() const& -> auto;
         public: [[nodiscard]] auto group(cpp2::impl::in<int> g) const& -> auto;
         public: [[nodiscard]] auto group_start(cpp2::impl::in<int> g) const& -> auto;
@@ -1374,7 +1376,7 @@ template<typename CharT, typename matcher_wrapper> class regular_expression {
         public: auto operator=(search_return const&) -> void = delete;
 
 
-#line 2457 "regex.h2"
+#line 2459 "regex.h2"
     };
 
     public: [[nodiscard]] auto match(cpp2::impl::in<bview<CharT>> str) const& -> auto;
@@ -1382,13 +1384,13 @@ template<typename CharT, typename matcher_wrapper> class regular_expression {
     public: [[nodiscard]] auto match(cpp2::impl::in<bview<CharT>> str, auto const& start, auto const& length) const& -> auto;
     public: template<typename Iter> [[nodiscard]] auto match(Iter const& start, Iter const& end) const& -> search_return<Iter>;
 
-#line 2469 "regex.h2"
+#line 2471 "regex.h2"
     public: [[nodiscard]] auto search(cpp2::impl::in<bview<CharT>> str) const& -> auto;
     public: [[nodiscard]] auto search(cpp2::impl::in<bview<CharT>> str, auto const& start) const& -> auto;
     public: [[nodiscard]] auto search(cpp2::impl::in<bview<CharT>> str, auto const& start, auto const& length) const& -> auto;
     public: template<typename Iter> [[nodiscard]] auto search(Iter const& start, Iter const& end) const& -> search_return<Iter>;
 
-#line 2491 "regex.h2"
+#line 2493 "regex.h2"
     public: [[nodiscard]] auto to_string() const& -> auto;
 
     // Helper functions
@@ -1400,7 +1402,7 @@ template<typename CharT, typename matcher_wrapper> class regular_expression {
     public: auto operator=(regular_expression const&) -> void = delete;
 
 
-#line 2504 "regex.h2"
+#line 2506 "regex.h2"
 };
 
 //-----------------------------------------------------------------------
@@ -1423,21 +1425,21 @@ template<typename Error_out> class regex_generator {
 
     public: explicit regex_generator(cpp2::impl::in<std::string_view> r, Error_out const& e);
 
-#line 2529 "regex.h2"
+#line 2531 "regex.h2"
     public: [[nodiscard]] auto parse() & -> std::string;
 
-#line 2564 "regex.h2"
+#line 2566 "regex.h2"
     private: auto extract_modifiers() & -> void;
     public: regex_generator(regex_generator const&) = delete; /* No 'that' constructor, suppress copy */
     public: auto operator=(regex_generator const&) -> void = delete;
 
 
-#line 2577 "regex.h2"
+#line 2579 "regex.h2"
 };
 
 template<typename Err> [[nodiscard]] auto generate_regex(cpp2::impl::in<std::string_view> regex, Err const& err) -> std::string;
 
-#line 2586 "regex.h2"
+#line 2588 "regex.h2"
 }
 }
 
@@ -1446,7 +1448,7 @@ template<typename Err> [[nodiscard]] auto generate_regex(cpp2::impl::in<std::str
 
 #line 1 "regex.h2"
 
-#line 21 "regex.h2"
+#line 23 "regex.h2"
 namespace cpp2 {
 
 namespace regex {
@@ -1508,7 +1510,7 @@ if (((*this) & perl_code_syntax) == perl_code_syntax) {_ret += _comma + "perl_co
 if (((*this) & perl_code_syntax_in_classes) == perl_code_syntax_in_classes) {_ret += _comma + "perl_code_syntax_in_classes";_comma = ", ";}
 return cpp2::move(_ret) + ")"; 
 }
-#line 28 "regex.h2"
+#line 30 "regex.h2"
 //-----------------------------------------------------------------------
 //
 //  Helper structures for the expression matching.
@@ -1526,43 +1528,43 @@ return cpp2::move(_ret) + ")";
                                   // mod: x
                                   // mod: xx
 
-#line 46 "regex.h2"
+#line 48 "regex.h2"
 // Structure for storing group information.
 //
 
-#line 55 "regex.h2"
+#line 57 "regex.h2"
 // Return value for every matcher.
 // 
 
-#line 62 "regex.h2"
+#line 64 "regex.h2"
 // Modifiable state during matching.
 //
 
-#line 71 "regex.h2"
+#line 73 "regex.h2"
     template <typename CharT, typename Iter, int max_groups> match_context<CharT,Iter,max_groups>::match_context(Iter const& begin_, Iter const& end_)
         : begin{ begin_ }
         , end{ end_ }{
 
-#line 74 "regex.h2"
+#line 76 "regex.h2"
     }
 
-#line 76 "regex.h2"
+#line 78 "regex.h2"
     template <typename CharT, typename Iter, int max_groups> match_context<CharT,Iter,max_groups>::match_context(match_context const& that)
                                    : begin{ that.begin }
                                    , end{ that.end }
                                    , groups{ that.groups }{}
-#line 76 "regex.h2"
+#line 78 "regex.h2"
     template <typename CharT, typename Iter, int max_groups> auto match_context<CharT,Iter,max_groups>::operator=(match_context const& that) -> match_context& {
                                    begin = that.begin;
                                    end = that.end;
                                    groups = that.groups;
                                    return *this; }
-#line 76 "regex.h2"
+#line 78 "regex.h2"
     template <typename CharT, typename Iter, int max_groups> match_context<CharT,Iter,max_groups>::match_context(match_context&& that) noexcept
                                    : begin{ std::move(that).begin }
                                    , end{ std::move(that).end }
                                    , groups{ std::move(that).groups }{}
-#line 76 "regex.h2"
+#line 78 "regex.h2"
     template <typename CharT, typename Iter, int max_groups> auto match_context<CharT,Iter,max_groups>::operator=(match_context&& that) noexcept -> match_context& {
                                    begin = std::move(that).begin;
                                    end = std::move(that).end;
@@ -1571,24 +1573,24 @@ return cpp2::move(_ret) + ")";
 
     // Getter and setter for groups
     //
-#line 80 "regex.h2"
+#line 82 "regex.h2"
     template <typename CharT, typename Iter, int max_groups> [[nodiscard]] auto match_context<CharT,Iter,max_groups>::get_group(auto const& group) const& -> auto { return CPP2_ASSERT_IN_BOUNDS(groups, group);  }
 
-#line 82 "regex.h2"
+#line 84 "regex.h2"
     template <typename CharT, typename Iter, int max_groups> [[nodiscard]] auto match_context<CharT,Iter,max_groups>::get_group_end(auto const& group) const& -> int{
         if (cpp2::impl::cmp_greater_eq(group,max_groups) || !(CPP2_ASSERT_IN_BOUNDS(groups, group).matched)) {
             return 0; 
         }
         return std::distance(begin, CPP2_ASSERT_IN_BOUNDS(groups, group).end); 
     }
-#line 88 "regex.h2"
+#line 90 "regex.h2"
     template <typename CharT, typename Iter, int max_groups> [[nodiscard]] auto match_context<CharT,Iter,max_groups>::get_group_start(auto const& group) const& -> int{
         if (cpp2::impl::cmp_greater_eq(group,max_groups) || !(CPP2_ASSERT_IN_BOUNDS(groups, group).matched)) {
             return 0; 
         }
         return std::distance(begin, CPP2_ASSERT_IN_BOUNDS(groups, group).start); 
     }
-#line 94 "regex.h2"
+#line 96 "regex.h2"
     template <typename CharT, typename Iter, int max_groups> [[nodiscard]] auto match_context<CharT,Iter,max_groups>::get_group_string(auto const& group) const& -> std::string{
         if (cpp2::impl::cmp_greater_eq(group,max_groups) || !(CPP2_ASSERT_IN_BOUNDS(groups, group).matched)) {
             return ""; 
@@ -1596,72 +1598,72 @@ return cpp2::move(_ret) + ")";
         return std::string(CPP2_ASSERT_IN_BOUNDS(groups, group).start, CPP2_ASSERT_IN_BOUNDS(groups, group).end); 
     }
 
-#line 101 "regex.h2"
+#line 103 "regex.h2"
     template <typename CharT, typename Iter, int max_groups> auto match_context<CharT,Iter,max_groups>::set_group_end(auto const& group, auto const& pos) & -> void{
         CPP2_ASSERT_IN_BOUNDS(groups, group).end = pos;
         CPP2_ASSERT_IN_BOUNDS(groups, group).matched = true;
     }
 
-#line 106 "regex.h2"
+#line 108 "regex.h2"
     template <typename CharT, typename Iter, int max_groups> auto match_context<CharT,Iter,max_groups>::set_group_invalid(auto const& group) & -> void{
         CPP2_ASSERT_IN_BOUNDS(groups, group).matched = false;
     }
 
-#line 110 "regex.h2"
+#line 112 "regex.h2"
     template <typename CharT, typename Iter, int max_groups> auto match_context<CharT,Iter,max_groups>::set_group_start(auto const& group, auto const& pos) & -> void{
         CPP2_ASSERT_IN_BOUNDS(groups, group).start = pos;
     }
 
-#line 114 "regex.h2"
+#line 116 "regex.h2"
     template <typename CharT, typename Iter, int max_groups> [[nodiscard]] auto match_context<CharT,Iter,max_groups>::size() const& -> auto { return max_groups;  }
 
     // Misc functions
     //
 
-#line 119 "regex.h2"
+#line 121 "regex.h2"
     template <typename CharT, typename Iter, int max_groups> [[nodiscard]] auto match_context<CharT,Iter,max_groups>::fail() const& -> auto { return match_return(false, end); }
-#line 120 "regex.h2"
+#line 122 "regex.h2"
     template <typename CharT, typename Iter, int max_groups> [[nodiscard]] auto match_context<CharT,Iter,max_groups>::pass(cpp2::impl::in<Iter> cur) const& -> auto { return match_return(true, cur);  }
 
-#line 124 "regex.h2"
+#line 126 "regex.h2"
 // End function that returns a valid match.
 //
 
-#line 127 "regex.h2"
+#line 129 "regex.h2"
     [[nodiscard]] auto true_end_func::operator()(auto const& cur, auto& ctx) const& -> auto { return ctx.pass(cur);  }
 
-#line 130 "regex.h2"
+#line 132 "regex.h2"
 // Empty group reset function.
 //
 
-#line 133 "regex.h2"
+#line 135 "regex.h2"
     auto no_reset::operator()([[maybe_unused]] auto& unnamed_param_2) const& -> void{}
 
-#line 136 "regex.h2"
+#line 138 "regex.h2"
 // Evaluate func on destruction of the handle.
 
-#line 141 "regex.h2"
+#line 143 "regex.h2"
     template <typename Func> on_return<Func>::on_return(Func const& f)
         : func{ f }{
 
-#line 143 "regex.h2"
+#line 145 "regex.h2"
     }
-#line 141 "regex.h2"
+#line 143 "regex.h2"
     template <typename Func> auto on_return<Func>::operator=(Func const& f) -> on_return& {
         func = f;
         return *this;
 
-#line 143 "regex.h2"
+#line 145 "regex.h2"
     }
 
-#line 145 "regex.h2"
+#line 147 "regex.h2"
     template <typename Func> on_return<Func>::~on_return() noexcept{
         cpp2::move(*this).func();
     }
 
-#line 150 "regex.h2"
+#line 152 "regex.h2"
 // Helper for auto deduction of the Func type.
-#line 151 "regex.h2"
+#line 153 "regex.h2"
 template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> auto { return on_return<Func>(func);  }
 
 //-----------------------------------------------------------------------
@@ -1674,72 +1676,72 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
 // Class syntax: <any character> Example: a
 //
 
-#line 164 "regex.h2"
+#line 166 "regex.h2"
     template <typename CharT, CharT C> [[nodiscard]] auto single_class_entry<CharT,C>::includes(cpp2::impl::in<CharT> c) -> auto { return c == C;  }
-#line 165 "regex.h2"
+#line 167 "regex.h2"
     template <typename CharT, CharT C> [[nodiscard]] auto single_class_entry<CharT,C>::to_string() -> auto { return bstring<CharT>(1, C); }
 
-#line 168 "regex.h2"
+#line 170 "regex.h2"
 // Class syntax: - Example: a-c
 //
 
-#line 172 "regex.h2"
+#line 174 "regex.h2"
     template <typename CharT, CharT Start, CharT End> [[nodiscard]] auto range_class_entry<CharT,Start,End>::includes(cpp2::impl::in<CharT> c) -> auto { return [_0 = Start, _1 = c, _2 = End]{ return cpp2::impl::cmp_less_eq(_0,_1) && cpp2::impl::cmp_less_eq(_1,_2); }();  }
-#line 173 "regex.h2"
+#line 175 "regex.h2"
     template <typename CharT, CharT Start, CharT End> [[nodiscard]] auto range_class_entry<CharT,Start,End>::to_string() -> auto { return cpp2::to_string(Start) + "-" + cpp2::to_string(End); }
 
-#line 176 "regex.h2"
+#line 178 "regex.h2"
 // Helper for combining two character classes
 //
 
-#line 179 "regex.h2"
+#line 181 "regex.h2"
     template <typename CharT, typename ...List> [[nodiscard]] auto combined_class_entry<CharT,List...>::includes(cpp2::impl::in<CharT> c) -> auto { return (false || ... || List::includes(c));  }
-#line 180 "regex.h2"
+#line 182 "regex.h2"
     template <typename CharT, typename ...List> [[nodiscard]] auto combined_class_entry<CharT,List...>::to_string() -> auto { return (bstring<CharT>() + ... + List::to_string()); }
 
-#line 183 "regex.h2"
+#line 185 "regex.h2"
 // Class syntax: <list of characters>  Example: abcd
 //
 
-#line 186 "regex.h2"
+#line 188 "regex.h2"
     template <typename CharT, CharT ...List> [[nodiscard]] auto list_class_entry<CharT,List...>::includes(cpp2::impl::in<CharT> c) -> auto { return (false || ... || (List == c));  }
-#line 187 "regex.h2"
+#line 189 "regex.h2"
     template <typename CharT, CharT ...List> [[nodiscard]] auto list_class_entry<CharT,List...>::to_string() -> auto { return (bstring<CharT>() + ... + List); }
 
-#line 190 "regex.h2"
+#line 192 "regex.h2"
 // Class syntax: [:<class name:]  Example: [:alnum:]
 //
 
-#line 193 "regex.h2"
+#line 195 "regex.h2"
     template <typename CharT, string_util::fixed_string Name, typename Inner> [[nodiscard]] auto named_class_entry<CharT,Name,Inner>::includes(cpp2::impl::in<CharT> c) -> auto { return Inner::includes(c);  }
-#line 194 "regex.h2"
+#line 196 "regex.h2"
     template <typename CharT, string_util::fixed_string Name, typename Inner> [[nodiscard]] auto named_class_entry<CharT,Name,Inner>::to_string() -> auto { return "[:" + cpp2::to_string(Name.data()) + ":]"; }
 
-#line 199 "regex.h2"
+#line 201 "regex.h2"
     template <typename CharT, typename Inner> [[nodiscard]] auto negated_class_entry<CharT,Inner>::includes(cpp2::impl::in<CharT> c) -> auto { return !(Inner::includes(c));  }
 
-#line 202 "regex.h2"
+#line 204 "regex.h2"
 // Short class syntax: \<character>  Example: \w
 //
 
-#line 205 "regex.h2"
+#line 207 "regex.h2"
     template <typename CharT, string_util::fixed_string Name, typename Inner> [[nodiscard]] auto shorthand_class_entry<CharT,Name,Inner>::includes(cpp2::impl::in<CharT> c) -> auto { return Inner::includes(c);  }
-#line 206 "regex.h2"
+#line 208 "regex.h2"
     template <typename CharT, string_util::fixed_string Name, typename Inner> [[nodiscard]] auto shorthand_class_entry<CharT,Name,Inner>::to_string() -> auto { return Name.str(); }
 
-#line 210 "regex.h2"
+#line 212 "regex.h2"
 // Named basic character classes
 //
 
-#line 216 "regex.h2"
+#line 218 "regex.h2"
 // Named other classes
 //
 
-#line 232 "regex.h2"
+#line 234 "regex.h2"
 // Shorthand class entries
 //
 
-#line 247 "regex.h2"
+#line 249 "regex.h2"
 //-----------------------------------------------------------------------
 //
 // Tokens for regular expressions.
@@ -1750,99 +1752,99 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
 // Basic class for a regex token.
 //
 
-#line 260 "regex.h2"
+#line 262 "regex.h2"
     regex_token::regex_token(cpp2::impl::in<std::string> str)
         : string_rep{ str }{
 
-#line 262 "regex.h2"
+#line 264 "regex.h2"
     }
 
-#line 264 "regex.h2"
+#line 266 "regex.h2"
     regex_token::regex_token()
         : string_rep{ "" }{
 
-#line 266 "regex.h2"
+#line 268 "regex.h2"
     }
 
     //parse: (inout ctx: parse_context) -> token_ptr;
                                                                        // Generate the matching code.
 
-#line 271 "regex.h2"
+#line 273 "regex.h2"
     auto regex_token::add_groups([[maybe_unused]] std::set<int>& unnamed_param_2) const -> void{}// Adds all group indices to the set.
-#line 272 "regex.h2"
+#line 274 "regex.h2"
     [[nodiscard]] auto regex_token::to_string() const& -> std::string{return string_rep; }// Create a string representation.
-#line 273 "regex.h2"
+#line 275 "regex.h2"
     auto regex_token::set_string(cpp2::impl::in<std::string> s) & -> void{string_rep = s; }
 
     regex_token::~regex_token() noexcept{}// Set the string representation.
 
-#line 286 "regex.h2"
+#line 288 "regex.h2"
     regex_token_check::regex_token_check(cpp2::impl::in<std::string> str, cpp2::impl::in<std::string> check_)
         : regex_token{ str }
         , check{ check_ }{
 
-#line 289 "regex.h2"
+#line 291 "regex.h2"
     }
 
-#line 291 "regex.h2"
+#line 293 "regex.h2"
     auto regex_token_check::generate_code(generation_context& ctx) const -> void{
         ctx.add_check(check + "(" + ctx.match_parameters() + ")");
     }
 
     regex_token_check::~regex_token_check() noexcept{}
 
-#line 302 "regex.h2"
+#line 304 "regex.h2"
     regex_token_code::regex_token_code(cpp2::impl::in<std::string> str, cpp2::impl::in<std::string> code_)
         : regex_token{ str }
         , code{ code_ }{
 
-#line 305 "regex.h2"
+#line 307 "regex.h2"
     }
 
-#line 307 "regex.h2"
+#line 309 "regex.h2"
     auto regex_token_code::generate_code(generation_context& ctx) const -> void{
         ctx.add(code);
     }
 
     regex_token_code::~regex_token_code() noexcept{}
 
-#line 316 "regex.h2"
+#line 318 "regex.h2"
     regex_token_empty::regex_token_empty(cpp2::impl::in<std::string> str)
         : regex_token{ str }{
 
-#line 318 "regex.h2"
+#line 320 "regex.h2"
     }
 
-#line 320 "regex.h2"
+#line 322 "regex.h2"
     auto regex_token_empty::generate_code([[maybe_unused]] generation_context& unnamed_param_2) const -> void{
         // Nothing.
     }
 
     regex_token_empty::~regex_token_empty() noexcept{}
 
-#line 332 "regex.h2"
+#line 334 "regex.h2"
     regex_token_list::regex_token_list(cpp2::impl::in<token_vec> t)
         : regex_token{ gen_string(t) }
         , tokens{ t }{
 
-#line 335 "regex.h2"
+#line 337 "regex.h2"
     }
 
-#line 337 "regex.h2"
+#line 339 "regex.h2"
     auto regex_token_list::generate_code(generation_context& ctx) const -> void{
         for ( auto const& token : tokens ) {
             (*cpp2::impl::assert_not_null(token)).generate_code(ctx);
         }
     }
 
-#line 343 "regex.h2"
+#line 345 "regex.h2"
     auto regex_token_list::add_groups(std::set<int>& groups) const -> void{
         for ( auto const& token : tokens ) {
             (*cpp2::impl::assert_not_null(token)).add_groups(groups);
         }
     }
 
-#line 349 "regex.h2"
+#line 351 "regex.h2"
     [[nodiscard]] auto regex_token_list::gen_string(cpp2::impl::in<token_vec> vec) -> std::string{
         std::string r {""}; 
         for ( auto const& token : vec ) {
@@ -1853,7 +1855,7 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
 
     regex_token_list::~regex_token_list() noexcept{}
 
-#line 375 "regex.h2"
+#line 377 "regex.h2"
     auto parse_context_group_state::next_alternative() & -> void{
         token_vec new_list {}; 
         std::swap(new_list, cur_match_list);
@@ -1861,14 +1863,14 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         static_cast<void>(alternate_match_lists.insert(alternate_match_lists.end(), CPP2_UFCS_TEMPLATE(cpp2_new<regex_token_list>)(cpp2::shared, cpp2::move(new_list))));
     }
 
-#line 383 "regex.h2"
+#line 385 "regex.h2"
     auto parse_context_group_state::swap(parse_context_group_state& t) & -> void{
         std::swap(cur_match_list, t.cur_match_list);
         std::swap(alternate_match_lists, t.alternate_match_lists);
         std::swap(modifiers, t.modifiers);
     }
 
-#line 390 "regex.h2"
+#line 392 "regex.h2"
     [[nodiscard]] auto parse_context_group_state::get_as_token() & -> token_ptr{
         if (alternate_match_lists.empty()) {
             post_process_list(cur_match_list);
@@ -1880,15 +1882,15 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         }
     }
 
-#line 402 "regex.h2"
+#line 404 "regex.h2"
     auto parse_context_group_state::add(cpp2::impl::in<token_ptr> token) & -> void{
         cur_match_list.push_back(token);
     }
 
-#line 407 "regex.h2"
+#line 409 "regex.h2"
     [[nodiscard]] auto parse_context_group_state::empty() const& -> bool { return cur_match_list.empty();  }
 
-#line 411 "regex.h2"
+#line 413 "regex.h2"
     auto parse_context_group_state::post_process_list(token_vec& list) -> void{
         // Merge all characters
         auto merge_pos {CPP2_UFCS(begin)(list)}; 
@@ -1903,7 +1905,7 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         }
     }
 
-#line 435 "regex.h2"
+#line 437 "regex.h2"
     [[nodiscard]] auto parse_context_branch_reset_state::next() & -> int{
         auto g {cur_group}; 
         cur_group += 1;
@@ -1912,20 +1914,20 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         return g; 
     }
 
-#line 444 "regex.h2"
+#line 446 "regex.h2"
     auto parse_context_branch_reset_state::set_next(cpp2::impl::in<int> g) & -> void{
         cur_group = g;
         max_group = max(max_group, g);
     }
 
-#line 450 "regex.h2"
+#line 452 "regex.h2"
     auto parse_context_branch_reset_state::next_alternative() & -> void{
         if (is_active) {
             cur_group = from;
         }
     }
 
-#line 457 "regex.h2"
+#line 459 "regex.h2"
     auto parse_context_branch_reset_state::set_active_reset(cpp2::impl::in<int> restart) & -> void{
         is_active = true;
         cur_group = restart;
@@ -1933,16 +1935,16 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         max_group = restart;
     }
 
-#line 483 "regex.h2"
+#line 485 "regex.h2"
     parse_context::parse_context(cpp2::impl::in<std::string_view> r, auto const& e)
         : regex{ r }
         , root{ CPP2_UFCS_TEMPLATE_NONLOCAL(cpp2_new<regex_token_empty>)(cpp2::shared, "") }
         , error_out{ e }{
 
-#line 487 "regex.h2"
+#line 489 "regex.h2"
     }
 
-#line 493 "regex.h2"
+#line 495 "regex.h2"
     [[nodiscard]] auto parse_context::start_group() & -> parse_context_group_state{
         parse_context_group_state old_state {}; 
         old_state.swap(cur_group_state);
@@ -1951,24 +1953,24 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         return old_state; 
     }
 
-#line 502 "regex.h2"
+#line 504 "regex.h2"
     [[nodiscard]] auto parse_context::end_group(cpp2::impl::in<parse_context_group_state> old_state) & -> token_ptr{
         auto inner {cur_group_state.get_as_token()}; 
         cur_group_state = old_state;
         return inner; 
     }
 
-#line 508 "regex.h2"
+#line 510 "regex.h2"
     [[nodiscard]] auto parse_context::get_modifiers() const& -> expression_flags{
         return cur_group_state.modifiers; 
     }
 
-#line 512 "regex.h2"
+#line 514 "regex.h2"
     auto parse_context::set_modifiers(cpp2::impl::in<expression_flags> mod) & -> void{
         cur_group_state.modifiers = mod;
     }
 
-#line 519 "regex.h2"
+#line 521 "regex.h2"
     [[nodiscard]] auto parse_context::branch_reset_new_state() & -> parse_context_branch_reset_state{
         parse_context_branch_reset_state old_state {}; 
         std::swap(old_state, cur_branch_reset_state);
@@ -1977,30 +1979,30 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         return old_state; 
     }
 
-#line 527 "regex.h2"
+#line 529 "regex.h2"
     auto parse_context::branch_reset_restore_state(cpp2::impl::in<parse_context_branch_reset_state> old_state) & -> void{
         auto max_group {cur_branch_reset_state.max_group}; 
         cur_branch_reset_state = old_state;
         cur_branch_reset_state.set_next(cpp2::move(max_group));
     }
 
-#line 533 "regex.h2"
+#line 535 "regex.h2"
     auto parse_context::next_alternative() & -> void{
         cur_group_state.next_alternative();
         cur_branch_reset_state.next_alternative();
     }
 
-#line 541 "regex.h2"
+#line 543 "regex.h2"
     auto parse_context::add_token(cpp2::impl::in<token_ptr> token) & -> void{
         cur_group_state.add(token);
     }
 
-#line 545 "regex.h2"
+#line 547 "regex.h2"
     [[nodiscard]] auto parse_context::has_token() const& -> bool{
         return !(cur_group_state.empty()); 
     }
 
-#line 549 "regex.h2"
+#line 551 "regex.h2"
     [[nodiscard]] auto parse_context::pop_token() & -> token_ptr{
         token_ptr r {nullptr}; 
         if (has_token()) {
@@ -2011,29 +2013,29 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         return r; 
     }
 
-#line 559 "regex.h2"
+#line 561 "regex.h2"
     [[nodiscard]] auto parse_context::get_as_token() & -> token_ptr{
         return root; 
     }
 
-#line 566 "regex.h2"
+#line 568 "regex.h2"
     [[nodiscard]] auto parse_context::get_cur_group() const& -> int{
         return cur_branch_reset_state.cur_group; 
     }
 
-#line 570 "regex.h2"
+#line 572 "regex.h2"
     [[nodiscard]] auto parse_context::next_group() & -> int{
         return cur_branch_reset_state.next(); 
     }
 
-#line 574 "regex.h2"
+#line 576 "regex.h2"
     auto parse_context::set_named_group(cpp2::impl::in<std::string> name, cpp2::impl::in<int> id) & -> void{
         if (!(named_groups.contains(name))) {// Redefinition of group name is not an error. The left most one is retained.
             CPP2_ASSERT_IN_BOUNDS(named_groups, name) = id;
         }
     }
 
-#line 580 "regex.h2"
+#line 582 "regex.h2"
     [[nodiscard]] auto parse_context::get_named_group(cpp2::impl::in<std::string> name) const& -> int{
         auto iter {named_groups.find(name)}; 
         if (iter == named_groups.end()) {
@@ -2044,10 +2046,10 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         }
     }
 
-#line 593 "regex.h2"
+#line 595 "regex.h2"
     [[nodiscard]] auto parse_context::current() const& -> char{return CPP2_ASSERT_IN_BOUNDS(regex, pos); }
 
-#line 596 "regex.h2"
+#line 598 "regex.h2"
     [[nodiscard]] auto parse_context::get_next_position(cpp2::impl::in<bool> in_class, cpp2::impl::in<bool> no_skip) const& -> size_t{
         auto perl_syntax {false}; 
         if (!(no_skip)) {
@@ -2086,7 +2088,7 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         return cur; 
     }
 
-#line 635 "regex.h2"
+#line 637 "regex.h2"
     [[nodiscard]] auto parse_context::next_impl(cpp2::impl::in<bool> in_class, cpp2::impl::in<bool> no_skip) & -> bool{
         pos = get_next_position(in_class, no_skip);
         if (pos != regex.size()) {
@@ -2097,14 +2099,14 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         }
     }
 
-#line 645 "regex.h2"
+#line 647 "regex.h2"
     [[nodiscard]] auto parse_context::next() & -> auto { return next_impl(false, false); }
-#line 646 "regex.h2"
+#line 648 "regex.h2"
     [[nodiscard]] auto parse_context::next_in_class() & -> auto { return next_impl(true, false);  }
-#line 647 "regex.h2"
+#line 649 "regex.h2"
     [[nodiscard]] auto parse_context::next_no_skip() & -> auto { return next_impl(false, true); }
 
-#line 649 "regex.h2"
+#line 651 "regex.h2"
     [[nodiscard]] auto parse_context::next_n(cpp2::impl::in<int> n) & -> bool{
         auto r {true}; 
         auto cur {0}; 
@@ -2114,10 +2116,10 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         return r; 
     }
 
-#line 658 "regex.h2"
+#line 660 "regex.h2"
     [[nodiscard]] auto parse_context::has_next() const& -> bool{return cpp2::impl::cmp_less(pos,regex.size()); }
 
-#line 660 "regex.h2"
+#line 662 "regex.h2"
     [[nodiscard]] auto parse_context::grab_until_impl(cpp2::impl::in<std::string> e, cpp2::impl::out<std::string> r, cpp2::impl::in<bool> any) & -> bool{
         auto end {pos}; 
         if (any) {
@@ -2138,14 +2140,14 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         }
     }
 
-#line 680 "regex.h2"
+#line 682 "regex.h2"
     [[nodiscard]] auto parse_context::grab_until(cpp2::impl::in<std::string> e, cpp2::impl::out<std::string> r) & -> auto { return grab_until_impl(e, cpp2::impl::out(&r), false); }
-#line 681 "regex.h2"
+#line 683 "regex.h2"
     [[nodiscard]] auto parse_context::grab_until(cpp2::impl::in<char> e, cpp2::impl::out<std::string> r) & -> auto { return grab_until_impl(std::string(1, e), cpp2::impl::out(&r), false); }
-#line 682 "regex.h2"
+#line 684 "regex.h2"
     [[nodiscard]] auto parse_context::grab_until_one_of(cpp2::impl::in<std::string> e, cpp2::impl::out<std::string> r) & -> auto { return grab_until_impl(e, cpp2::impl::out(&r), true);  }
 
-#line 684 "regex.h2"
+#line 686 "regex.h2"
     [[nodiscard]] auto parse_context::grab_n(cpp2::impl::in<int> n, cpp2::impl::out<std::string> r) & -> bool{
         if (cpp2::impl::cmp_less_eq(pos + n,regex.size())) {
             r.construct(regex.substr(pos, n));
@@ -2158,7 +2160,7 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         }
     }
 
-#line 696 "regex.h2"
+#line 698 "regex.h2"
     [[nodiscard]] auto parse_context::grab_number() & -> std::string{
         auto start {pos}; 
         auto start_search {pos}; 
@@ -2179,7 +2181,7 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         return cpp2::move(r.value()); 
     }
 
-#line 716 "regex.h2"
+#line 718 "regex.h2"
     [[nodiscard]] auto parse_context::peek_impl(cpp2::impl::in<bool> in_class) const& -> char{
         auto next_pos {get_next_position(in_class, false)}; 
         if (cpp2::impl::cmp_less(next_pos,regex.size())) {
@@ -2190,12 +2192,12 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         }
     }
 
-#line 726 "regex.h2"
+#line 728 "regex.h2"
     [[nodiscard]] auto parse_context::peek() const& -> auto { return peek_impl(false); }
-#line 727 "regex.h2"
+#line 729 "regex.h2"
     [[nodiscard]] auto parse_context::peek_in_class() const& -> auto { return peek_impl(true);  }
 
-#line 732 "regex.h2"
+#line 734 "regex.h2"
     [[nodiscard]] auto parse_context::parser_group_modifiers(cpp2::impl::in<std::string> change_str, expression_flags& parser_modifiers) & -> bool{
         auto is_negative {false}; 
         auto is_reset {false}; 
@@ -2248,7 +2250,7 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         return true; 
     }
 
-#line 784 "regex.h2"
+#line 786 "regex.h2"
     [[nodiscard]] auto parse_context::parse_until(cpp2::impl::in<char> term) & -> bool{
         token_ptr cur_token {}; 
 
@@ -2286,7 +2288,7 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         return true; 
     }
 
-#line 821 "regex.h2"
+#line 823 "regex.h2"
     [[nodiscard]] auto parse_context::parse(cpp2::impl::in<std::string> modifiers) & -> bool{
 
         expression_flags flags {}; 
@@ -2301,21 +2303,21 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         return r; 
     }
 
-#line 837 "regex.h2"
-    [[nodiscard]] auto parse_context::get_pos() const& -> auto { return pos; }
-#line 838 "regex.h2"
-    [[nodiscard]] auto parse_context::get_range(cpp2::impl::in<int> start, cpp2::impl::in<int> end) const& -> auto { return std::string(regex.substr(start, end - start + 1));  }
 #line 839 "regex.h2"
+    [[nodiscard]] auto parse_context::get_pos() const& -> auto { return pos; }
+#line 840 "regex.h2"
+    [[nodiscard]] auto parse_context::get_range(cpp2::impl::in<size_t> start, cpp2::impl::in<size_t> end) const& -> auto { return std::string(regex.substr(start, end - start + 1));  }
+#line 841 "regex.h2"
     [[nodiscard]] auto parse_context::valid() const& -> bool{return has_next() && !(has_error); }
 
-#line 841 "regex.h2"
+#line 843 "regex.h2"
     [[nodiscard]] auto parse_context::error(cpp2::impl::in<std::string> err) & -> token_ptr{
         has_error = true;
         error_out(("Error during parsing of regex '" + cpp2::to_string(regex) + "' at position '" + cpp2::to_string(pos) + "': " + cpp2::to_string(err)));
         return nullptr; 
     }
 
-#line 855 "regex.h2"
+#line 857 "regex.h2"
     auto generation_function_context::add_tabs(cpp2::impl::in<int> c) & -> void{
         int i {0}; 
         for( ; cpp2::impl::cmp_less(i,c); i += 1 ) {
@@ -2323,27 +2325,27 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         }
     }
 
-#line 862 "regex.h2"
+#line 864 "regex.h2"
     auto generation_function_context::remove_tabs(cpp2::impl::in<int> c) & -> void{
         tabs = tabs.substr(0, c * 2);
     }
 
-#line 880 "regex.h2"
+#line 882 "regex.h2"
     [[nodiscard]] auto generation_context::match_parameters() const& -> std::string{return "r.pos, ctx"; }
 
-#line 885 "regex.h2"
+#line 887 "regex.h2"
     auto generation_context::add(cpp2::impl::in<std::string> s) & -> void{
         auto cur {get_current()}; 
         (*cpp2::impl::assert_not_null(cur)).code += (cpp2::to_string((*cpp2::impl::assert_not_null(cur)).tabs) + cpp2::to_string(s) + "\n");
     }
 
-#line 891 "regex.h2"
+#line 893 "regex.h2"
     auto generation_context::add_check(cpp2::impl::in<std::string> check) & -> void{
         auto cur {get_current()}; 
         (*cpp2::impl::assert_not_null(cur)).code += (cpp2::to_string((*cpp2::impl::assert_not_null(cur)).tabs) + "if !cpp2::regex::" + cpp2::to_string(check) + " { r.matched = false; break; }\n");
     }
 
-#line 897 "regex.h2"
+#line 899 "regex.h2"
     auto generation_context::add_statefull(cpp2::impl::in<std::string> next_func, cpp2::impl::in<std::string> check) & -> void{
         end_func_statefull(check);
 
@@ -2351,7 +2353,7 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         start_func_named(cpp2::move(name));
     }
 
-#line 904 "regex.h2"
+#line 906 "regex.h2"
     auto generation_context::start_func_named(cpp2::impl::in<std::string> name) & -> void{
         auto cur {new_context()}; 
 
@@ -2362,14 +2364,14 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         (*cpp2::impl::assert_not_null(cpp2::move(cur))).add_tabs(3);
     }
 
-#line 914 "regex.h2"
+#line 916 "regex.h2"
     [[nodiscard]] auto generation_context::start_func() & -> std::string{
         auto name {gen_func_name()}; 
         start_func_named(name);
         return cpp2::move(name) + "()"; 
     }
 
-#line 920 "regex.h2"
+#line 922 "regex.h2"
     auto generation_context::end_func_statefull(cpp2::impl::in<std::string> s) & -> void{
         auto cur {get_current()}; 
         (*cpp2::impl::assert_not_null(cur)).remove_tabs(3);
@@ -2388,7 +2390,7 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         finish_context();
     }
 
-#line 939 "regex.h2"
+#line 941 "regex.h2"
     [[nodiscard]] auto generation_context::generate_func(cpp2::impl::in<token_ptr> token) & -> std::string{
         auto name {start_func()}; 
         (*cpp2::impl::assert_not_null(token)).generate_code((*this));
@@ -2397,7 +2399,7 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         return name; 
     }
 
-#line 948 "regex.h2"
+#line 950 "regex.h2"
     [[nodiscard]] auto generation_context::generate_reset(cpp2::impl::in<std::set<int>> groups) & -> std::string{
         if (groups.empty()) {
             return "cpp2::regex::no_reset()"; 
@@ -2419,33 +2421,33 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         return cpp2::move(name) + "()"; 
     }
 
-#line 972 "regex.h2"
+#line 974 "regex.h2"
     [[nodiscard]] auto generation_context::gen_func_name() & -> std::string{
         auto cur_id {matcher_func}; 
         matcher_func += 1;
         return { "func_" + cpp2::to_string(cpp2::move(cur_id)) }; 
     }
 
-#line 978 "regex.h2"
+#line 980 "regex.h2"
     [[nodiscard]] auto generation_context::next_func_name() & -> std::string{
         return gen_func_name() + "()"; 
     }
 
-#line 982 "regex.h2"
+#line 984 "regex.h2"
     [[nodiscard]] auto generation_context::gen_reset_func_name() & -> std::string{
         auto cur_id {reset_func}; 
         reset_func += 1;
         return { "reset_" + cpp2::to_string(cpp2::move(cur_id)) }; 
     }
 
-#line 988 "regex.h2"
+#line 990 "regex.h2"
     [[nodiscard]] auto generation_context::gen_temp() & -> std::string{
         auto cur_id {temp_name}; 
         temp_name += 1;
         return { "tmp_" + cpp2::to_string(cpp2::move(cur_id)) }; 
     }
 
-#line 997 "regex.h2"
+#line 999 "regex.h2"
     [[nodiscard]] auto generation_context::new_context() & -> generation_function_context*{
         gen_stack.push_back(generation_function_context());
         auto cur {get_current()}; 
@@ -2454,7 +2456,7 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         return cur; 
     }
 
-#line 1005 "regex.h2"
+#line 1007 "regex.h2"
     auto generation_context::finish_context() & -> void{
         auto cur {get_current()}; 
         auto base {get_base()}; 
@@ -2463,22 +2465,22 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         gen_stack.pop_back();
     }
 
-#line 1016 "regex.h2"
+#line 1018 "regex.h2"
     [[nodiscard]] auto generation_context::get_current() & -> generation_function_context*{
         return &gen_stack.back(); 
     }
 
-#line 1020 "regex.h2"
+#line 1022 "regex.h2"
     [[nodiscard]] auto generation_context::get_base() & -> generation_function_context*{
         return &CPP2_ASSERT_IN_BOUNDS_LITERAL(gen_stack, 0); 
     }
 
-#line 1024 "regex.h2"
+#line 1026 "regex.h2"
     [[nodiscard]] auto generation_context::get_entry_func() const& -> std::string{
         return entry_func; 
     }
 
-#line 1028 "regex.h2"
+#line 1030 "regex.h2"
     [[nodiscard]] auto generation_context::create_named_group_lookup(cpp2::impl::in<std::map<std::string,int>> named_groups) const& -> std::string{
         std::string res {"get_named_group_index: (name) -> int = {\n"}; 
 
@@ -2501,18 +2503,18 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         return res; 
     }
 
-#line 1052 "regex.h2"
+#line 1054 "regex.h2"
     [[nodiscard]] auto generation_context::run(cpp2::impl::in<token_ptr> token) & -> std::string{
         entry_func = generate_func(token);
 
         return (*cpp2::impl::assert_not_null(get_base())).code; 
     }
 
-#line 1066 "regex.h2"
+#line 1068 "regex.h2"
     alternative_token::alternative_token()
                             : regex_token_empty{ "" }{}
 
-#line 1068 "regex.h2"
+#line 1070 "regex.h2"
     [[nodiscard]] auto alternative_token::parse(parse_context& ctx) -> token_ptr{
         if (ctx.current() != '|') {return nullptr; }
 
@@ -2523,15 +2525,15 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
 
     alternative_token::~alternative_token() noexcept{}
 
-#line 1082 "regex.h2"
+#line 1084 "regex.h2"
     alternative_token_gen::alternative_token_gen(cpp2::impl::in<token_vec> a)
         : regex_token{ gen_string(a) }
         , alternatives{ a }{
 
-#line 1085 "regex.h2"
+#line 1087 "regex.h2"
     }
 
-#line 1087 "regex.h2"
+#line 1089 "regex.h2"
     auto alternative_token_gen::generate_code(generation_context& ctx) const -> void{
         std::string functions {""}; 
 
@@ -2548,14 +2550,14 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         ctx.add_statefull(next_name, ("cpp2::regex::alternative_token_matcher<char>::match(" + cpp2::to_string(ctx.match_parameters()) + ", other, " + cpp2::to_string(next_name) + " " + cpp2::to_string(cpp2::move(functions)) + ")"));
     }
 
-#line 1103 "regex.h2"
+#line 1105 "regex.h2"
     auto alternative_token_gen::add_groups(std::set<int>& groups) const -> void{
         for ( auto const& cur : alternatives ) {
             (*cpp2::impl::assert_not_null(cur)).add_groups(groups);
         }
     }
 
-#line 1109 "regex.h2"
+#line 1111 "regex.h2"
     [[nodiscard]] auto alternative_token_gen::gen_string(cpp2::impl::in<token_vec> a) -> std::string{
         std::string r {""}; 
         std::string sep {""}; 
@@ -2570,11 +2572,11 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
 
     alternative_token_gen::~alternative_token_gen() noexcept{}
 
-#line 1124 "regex.h2"
+#line 1126 "regex.h2"
     template <typename CharT> [[nodiscard]] auto alternative_token_matcher<CharT>::match(auto const& cur, auto& ctx, auto const& end_func, auto const& tail, auto const& ...functions) -> auto{
         return match_first(cur, ctx, end_func, tail, functions...); 
     }
-#line 1127 "regex.h2"
+#line 1129 "regex.h2"
     template <typename CharT> template<typename ...Other> [[nodiscard]] auto alternative_token_matcher<CharT>::match_first(auto const& cur, auto& ctx, auto const& end_func, auto const& tail, auto const& cur_func, auto const& cur_reset, Other const& ...other) -> auto{
         auto inner_call {[_0 = (tail), _1 = (end_func)](auto const& tail_cur, auto& tail_ctx) -> auto{
             return _0(tail_cur, tail_ctx, _1); 
@@ -2593,14 +2595,14 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
         }
     }
 
-#line 1151 "regex.h2"
+#line 1153 "regex.h2"
     any_token::any_token(cpp2::impl::in<bool> single_line)
         : regex_token_check{ ".", ("any_token_matcher<char, " + cpp2::to_string(single_line) + ">") }{
 
-#line 1153 "regex.h2"
+#line 1155 "regex.h2"
     }
 
-#line 1155 "regex.h2"
+#line 1157 "regex.h2"
     [[nodiscard]] auto any_token::parse(parse_context& ctx) -> token_ptr{
         if ('.' != ctx.current()) {return nullptr; }
 
@@ -2609,7 +2611,7 @@ template<typename Func> [[nodiscard]] auto make_on_return(Func const& func) -> a
 
     any_token::~any_token() noexcept{}
 
-#line 1162 "regex.h2"
+#line 1164 "regex.h2"
 template<typename CharT, bool single_line> [[nodiscard]] auto any_token_matcher(auto& cur, auto& ctx) -> bool{
     if (cur != ctx.end // Any char except the end
         && (single_line || *cpp2::impl::assert_not_null(cur) != '\n')) {// Do not match new lines in multi line mode.
@@ -2621,21 +2623,21 @@ template<typename CharT, bool single_line> [[nodiscard]] auto any_token_matcher(
     }
 }
 
-#line 1181 "regex.h2"
+#line 1183 "regex.h2"
     char_token::char_token(cpp2::impl::in<char> t, cpp2::impl::in<bool> ignore_case_)
         : regex_token{ std::string(1, t) }
         , token{ t }
         , ignore_case{ ignore_case_ }{
 
-#line 1185 "regex.h2"
+#line 1187 "regex.h2"
     }
 
-#line 1187 "regex.h2"
+#line 1189 "regex.h2"
     [[nodiscard]] auto char_token::parse(parse_context& ctx) -> token_ptr{
         return CPP2_UFCS_TEMPLATE(cpp2_new<char_token>)(cpp2::shared, ctx.current(), ctx.get_modifiers().has(expression_flags::case_insensitive)); 
     }
 
-#line 1191 "regex.h2"
+#line 1193 "regex.h2"
     auto char_token::generate_code(generation_context& ctx) const -> void{
         if (ignore_case) {
             std::string upper {token}; 
@@ -2643,14 +2645,14 @@ template<typename CharT, bool single_line> [[nodiscard]] auto any_token_matcher(
 {
 size_t i{0};
 
-#line 1196 "regex.h2"
+#line 1198 "regex.h2"
             for( ; cpp2::impl::cmp_less(i,token.size()); i += 1 ) {
                 CPP2_ASSERT_IN_BOUNDS(lower, i) = string_util::safe_tolower(CPP2_ASSERT_IN_BOUNDS(token, i));
                 CPP2_ASSERT_IN_BOUNDS(upper, i) = string_util::safe_toupper(CPP2_ASSERT_IN_BOUNDS(token, i));
             }
 }
 
-#line 1201 "regex.h2"
+#line 1203 "regex.h2"
             if (upper != lower) {
                 gen_case_insensitive(cpp2::move(lower), cpp2::move(upper), ctx);
             }
@@ -2663,7 +2665,7 @@ size_t i{0};
         }
     }
 
-#line 1213 "regex.h2"
+#line 1215 "regex.h2"
     auto char_token::gen_case_insensitive(cpp2::impl::in<std::string> lower, cpp2::impl::in<std::string> upper, generation_context& ctx) const& -> void{
         std::string name {"str_" + cpp2::to_string(ctx.gen_temp())}; 
         std::string lower_name {"lower_" + cpp2::to_string(name)}; 
@@ -2684,7 +2686,7 @@ size_t i{0};
         ctx.add("else { break; }");
     }
 
-#line 1233 "regex.h2"
+#line 1235 "regex.h2"
     auto char_token::gen_case_sensitive(generation_context& ctx) const& -> void{
         std::string name {"str_" + cpp2::to_string(ctx.gen_temp())}; 
         auto size {token.size()}; 
@@ -2702,7 +2704,7 @@ size_t i{0};
         ctx.add("else { break; }");
     }
 
-#line 1250 "regex.h2"
+#line 1252 "regex.h2"
     [[nodiscard]] auto char_token::add_escapes(std::string str) const& -> std::string{
         str = string_util::replace_all(str, "\\", "\\\\");
         str = string_util::replace_all(str, "\a", "\\a");
@@ -2715,7 +2717,7 @@ size_t i{0};
         return cpp2::move(str); 
     }
 
-#line 1262 "regex.h2"
+#line 1264 "regex.h2"
     auto char_token::append(char_token const& that) & -> void{
         (*this).token += that.token;
         (*this).string_rep += that.string_rep;
@@ -2723,17 +2725,17 @@ size_t i{0};
 
     char_token::~char_token() noexcept{}
 
-#line 1310 "regex.h2"
+#line 1312 "regex.h2"
     class_token::class_token(cpp2::impl::in<bool> negate_, cpp2::impl::in<bool> case_insensitive_, cpp2::impl::in<std::string> class_str_, cpp2::impl::in<std::string> str)
         : regex_token{ str }
         , negate{ negate_ }
         , case_insensitive{ case_insensitive_ }
         , class_str{ class_str_ }{
 
-#line 1315 "regex.h2"
+#line 1317 "regex.h2"
     }
 
-#line 1318 "regex.h2"
+#line 1320 "regex.h2"
     [[nodiscard]] auto class_token::parse(parse_context& ctx) -> token_ptr{
         if (ctx.current() != '[') {return nullptr; }
 
@@ -2841,12 +2843,12 @@ size_t i{0};
         return CPP2_UFCS_TEMPLATE(cpp2_new<class_token>)(cpp2::shared, cpp2::move(is_negate), ctx.get_modifiers().has(expression_flags::case_insensitive), cpp2::move(inner), cpp2::move(string_rep)); 
     }
 
-#line 1425 "regex.h2"
+#line 1427 "regex.h2"
     auto class_token::generate_code(generation_context& ctx) const -> void{
         ctx.add_check(("class_token_matcher<char, " + cpp2::to_string(negate) + ", " + cpp2::to_string(case_insensitive) + ", " + cpp2::to_string(class_str) + ">::match(" + cpp2::to_string(ctx.match_parameters()) + ")"));
     }
 
-#line 1430 "regex.h2"
+#line 1432 "regex.h2"
     [[nodiscard]] auto class_token::create_matcher(cpp2::impl::in<std::string> name, cpp2::impl::in<std::string> template_arguments) -> std::string{
         auto sep {", "}; 
         if (template_arguments.empty()) {sep = ""; }
@@ -2856,7 +2858,7 @@ size_t i{0};
 
     class_token::~class_token() noexcept{}
 
-#line 1440 "regex.h2"
+#line 1442 "regex.h2"
     template <typename CharT, bool negate, bool case_insensitive, typename ...List> [[nodiscard]] auto class_token_matcher<CharT,negate,case_insensitive,List...>::match(auto& cur, auto& ctx) -> bool{
         if constexpr (case_insensitive) {
             if (cur != ctx.end && negate != (match_any<List...>(string_util::safe_tolower(*cpp2::impl::assert_not_null(cur))) || match_any<List...>(string_util::safe_toupper(*cpp2::impl::assert_not_null(cur))))) {
@@ -2878,7 +2880,7 @@ size_t i{0};
         }
     }
 
-#line 1461 "regex.h2"
+#line 1463 "regex.h2"
     template <typename CharT, bool negate, bool case_insensitive, typename ...List> template<typename First, typename ...Other> [[nodiscard]] auto class_token_matcher<CharT,negate,case_insensitive,List...>::match_any(cpp2::impl::in<CharT> c) -> bool{
         bool r {First::includes(c)}; 
 
@@ -2891,11 +2893,11 @@ size_t i{0};
         return r; 
     }
 
-#line 1488 "regex.h2"
+#line 1490 "regex.h2"
 [[nodiscard]] auto escape_token_parse(parse_context& ctx) -> token_ptr{
     if (ctx.current() != '\\') {return nullptr; }
 
-#line 1492 "regex.h2"
+#line 1494 "regex.h2"
     if (std::string::npos == std::string("afenrt^.[]()*{}?+|\\").find(ctx.peek())) {
         return nullptr; 
     }
@@ -2927,7 +2929,7 @@ size_t i{0};
 
 }
 
-#line 1525 "regex.h2"
+#line 1527 "regex.h2"
 [[nodiscard]] auto global_group_reset_token_parse(parse_context& ctx) -> token_ptr{
     if (!((ctx.current() == '\\' && ctx.peek() == 'K'))) {return nullptr; }
 
@@ -2935,16 +2937,16 @@ size_t i{0};
     return CPP2_UFCS_TEMPLATE(cpp2_new<regex_token_code>)(cpp2::shared, "\\K", "ctx..set_group_start(0, r.pos);"); 
 }
 
-#line 1544 "regex.h2"
+#line 1546 "regex.h2"
     group_ref_token::group_ref_token(cpp2::impl::in<int> id_, cpp2::impl::in<bool> case_insensitive_, cpp2::impl::in<std::string> str)
         : regex_token{ str }
         , id{ id_ }
         , case_insensitive{ case_insensitive_ }{
 
-#line 1548 "regex.h2"
+#line 1550 "regex.h2"
     }
 
-#line 1550 "regex.h2"
+#line 1552 "regex.h2"
     [[nodiscard]] auto group_ref_token::parse(parse_context& ctx) -> token_ptr{
         if (ctx.current() != '\\') {return nullptr; }
 
@@ -3037,14 +3039,14 @@ size_t i{0};
         return CPP2_UFCS_TEMPLATE(cpp2_new<group_ref_token>)(cpp2::shared, cpp2::move(group_id), ctx.get_modifiers().has(expression_flags::case_insensitive), cpp2::move(str)); 
     }
 
-#line 1642 "regex.h2"
+#line 1644 "regex.h2"
     auto group_ref_token::generate_code(generation_context& ctx) const -> void{
         ctx.add_check(("group_ref_token_matcher<char, " + cpp2::to_string(id) + ", " + cpp2::to_string(case_insensitive) + ">(" + cpp2::to_string(ctx.match_parameters()) + ")"));
     }
 
     group_ref_token::~group_ref_token() noexcept{}
 
-#line 1647 "regex.h2"
+#line 1649 "regex.h2"
 template<typename CharT, int group, bool case_insensitive> [[nodiscard]] auto group_ref_token_matcher(auto& cur, auto& ctx) -> bool{
     auto g {ctx.get_group(group)}; 
 
@@ -3070,7 +3072,7 @@ template<typename CharT, int group, bool case_insensitive> [[nodiscard]] auto gr
     }
 }
 
-#line 1688 "regex.h2"
+#line 1690 "regex.h2"
     [[nodiscard]] auto group_token::parse_lookahead(parse_context& ctx, cpp2::impl::in<std::string> syntax, cpp2::impl::in<bool> positive) -> token_ptr{
         static_cast<void>(ctx.next());// Skip last token defining the syntax
 
@@ -3084,7 +3086,7 @@ template<typename CharT, int group, bool case_insensitive> [[nodiscard]] auto gr
         return r; 
     }
 
-#line 1701 "regex.h2"
+#line 1703 "regex.h2"
     [[nodiscard]] auto group_token::parse(parse_context& ctx) -> token_ptr{
         if (ctx.current() != '(') {return nullptr; }
 
@@ -3212,7 +3214,7 @@ template<typename CharT, int group, bool case_insensitive> [[nodiscard]] auto gr
         }
     }
 
-#line 1828 "regex.h2"
+#line 1830 "regex.h2"
     [[nodiscard]] auto group_token::gen_string(cpp2::impl::in<std::string> name, cpp2::impl::in<bool> name_brackets, cpp2::impl::in<bool> has_modifier, cpp2::impl::in<std::string> modifiers, cpp2::impl::in<token_ptr> inner_) -> std::string{
         std::string start {"("}; 
         if (0 != name.size()) {
@@ -3230,7 +3232,7 @@ template<typename CharT, int group, bool case_insensitive> [[nodiscard]] auto gr
         return cpp2::move(start) + (*cpp2::impl::assert_not_null(inner_)).to_string() + ")"; 
     }
 
-#line 1845 "regex.h2"
+#line 1847 "regex.h2"
     auto group_token::generate_code(generation_context& ctx) const -> void{
         if (-1 != number) {
             ctx.add(("ctx..set_group_start(" + cpp2::to_string(number) + ", r.pos);"));
@@ -3250,7 +3252,7 @@ template<typename CharT, int group, bool case_insensitive> [[nodiscard]] auto gr
         }
     }
 
-#line 1864 "regex.h2"
+#line 1866 "regex.h2"
     auto group_token::add_groups(std::set<int>& groups) const -> void{
         (*cpp2::impl::assert_not_null(inner)).add_groups(groups);
         if (-1 != number) {
@@ -3260,7 +3262,7 @@ template<typename CharT, int group, bool case_insensitive> [[nodiscard]] auto gr
 
     group_token::~group_token() noexcept{}
 
-#line 1874 "regex.h2"
+#line 1876 "regex.h2"
 [[nodiscard]] auto hexadecimal_token_parse(parse_context& ctx) -> token_ptr{
     if (!((ctx.current() == '\\' && ctx.peek() == 'x'))) {return nullptr; }
 
@@ -3300,7 +3302,7 @@ template<typename CharT, int group, bool case_insensitive> [[nodiscard]] auto gr
     return r; 
 }
 
-#line 1915 "regex.h2"
+#line 1917 "regex.h2"
 [[nodiscard]] auto line_end_token_parse(parse_context& ctx) -> token_ptr{
     if (ctx.current() == '$' || (ctx.current() == '\\' && ctx.peek() == '$')) {
         if ((ctx.current() == '\\')) {static_cast<void>(ctx.next()); }// Skip escape
@@ -3317,7 +3319,7 @@ template<typename CharT, int group, bool case_insensitive> [[nodiscard]] auto gr
     }}
 }
 
-#line 1931 "regex.h2"
+#line 1933 "regex.h2"
 template<typename CharT, bool match_new_line, bool match_new_line_before_end> [[nodiscard]] auto line_end_token_matcher(auto const& cur, auto& ctx) -> bool{
     if (cur == ctx.end || (match_new_line && *cpp2::impl::assert_not_null(cur) == '\n')) {
         return true; 
@@ -3330,7 +3332,7 @@ template<typename CharT, bool match_new_line, bool match_new_line_before_end> [[
     }}
 }
 
-#line 1945 "regex.h2"
+#line 1947 "regex.h2"
 [[nodiscard]] auto line_start_token_parse(parse_context& ctx) -> token_ptr{
     if (ctx.current() != '^' && !((ctx.current() == '\\' && ctx.peek() == 'A'))) {return nullptr; }
 
@@ -3343,35 +3345,35 @@ template<typename CharT, bool match_new_line, bool match_new_line_before_end> [[
     }
 }
 
-#line 1957 "regex.h2"
+#line 1959 "regex.h2"
 template<typename CharT, bool match_new_line> [[nodiscard]] auto line_start_token_matcher(auto const& cur, auto& ctx) -> bool{
     return cur == ctx.begin || // Start of string
            (match_new_line && *cpp2::impl::assert_not_null((cur - 1)) == '\n'); // Start of new line
 }
 
-#line 1972 "regex.h2"
+#line 1974 "regex.h2"
     lookahead_token::lookahead_token(cpp2::impl::in<bool> positive_)
         : regex_token{ "" }
         , positive{ positive_ }{
 
-#line 1974 "regex.h2"
+#line 1976 "regex.h2"
     }
 
-#line 1976 "regex.h2"
+#line 1978 "regex.h2"
     auto lookahead_token::generate_code(generation_context& ctx) const -> void{
         auto inner_name {ctx.generate_func(inner)}; 
 
         ctx.add_check(("lookahead_token_matcher<char, " + cpp2::to_string(positive) + ">(" + cpp2::to_string(ctx.match_parameters()) + ", " + cpp2::to_string(cpp2::move(inner_name)) + ")"));
     }
 
-#line 1982 "regex.h2"
+#line 1984 "regex.h2"
     auto lookahead_token::add_groups(std::set<int>& groups) const -> void{
         (*cpp2::impl::assert_not_null(inner)).add_groups(groups);
     }
 
     lookahead_token::~lookahead_token() noexcept{}
 
-#line 1987 "regex.h2"
+#line 1989 "regex.h2"
 template<typename CharT, bool positive> [[nodiscard]] auto lookahead_token_matcher(auto const& cur, auto& ctx, auto const& func) -> bool{
     auto r {func(cur, ctx, true_end_func())}; 
     if (!(positive)) {
@@ -3381,7 +3383,7 @@ template<typename CharT, bool positive> [[nodiscard]] auto lookahead_token_match
     return cpp2::move(r).matched; 
 }
 
-#line 1999 "regex.h2"
+#line 2001 "regex.h2"
 [[nodiscard]] auto named_class_token_parse(parse_context& ctx) -> token_ptr{
     if (ctx.current() != '\\') {return nullptr; }
 
@@ -3406,7 +3408,7 @@ template<typename CharT, bool positive> [[nodiscard]] auto lookahead_token_match
     return CPP2_UFCS_TEMPLATE(cpp2_new<regex_token_check>)(cpp2::shared, ("\\" + cpp2::to_string(ctx.current())), (cpp2::to_string(cpp2::move(name)) + "<char, " + cpp2::to_string(ctx.get_modifiers().has(expression_flags::case_insensitive)) + ">::match")); 
 }
 
-#line 2039 "regex.h2"
+#line 2041 "regex.h2"
 [[nodiscard]] auto octal_token_parse(parse_context& ctx) -> token_ptr{
     if (!((ctx.current() == '\\' && ctx.peek() == 'o'))) {return nullptr; }
 
@@ -3431,16 +3433,16 @@ template<typename CharT, bool positive> [[nodiscard]] auto lookahead_token_match
     return r; 
 }
 
-#line 2069 "regex.h2"
+#line 2071 "regex.h2"
     inline CPP2_CONSTEXPR int range_flags::not_greedy{ 1 };
     inline CPP2_CONSTEXPR int range_flags::greedy{ 2 };
     inline CPP2_CONSTEXPR int range_flags::possessive{ 3 };
 
-#line 2084 "regex.h2"
+#line 2086 "regex.h2"
     range_token::range_token()
                              : regex_token{ "" }{}
 
-#line 2086 "regex.h2"
+#line 2088 "regex.h2"
     [[nodiscard]] auto range_token::parse(parse_context& ctx) -> token_ptr{
         auto r {CPP2_UFCS_TEMPLATE(cpp2_new<range_token>)(cpp2::shared)}; 
         if (ctx.current() == '{') {
@@ -3484,7 +3486,7 @@ template<typename CharT, bool positive> [[nodiscard]] auto lookahead_token_match
                 }
             }
 
-#line 2130 "regex.h2"
+#line 2132 "regex.h2"
             // Check validity of the range.
             if (-1 != (*cpp2::impl::assert_not_null(r)).min_count) {
                 if (!((cpp2::impl::cmp_less_eq(0,(*cpp2::impl::assert_not_null(r)).min_count)))) {
@@ -3511,7 +3513,7 @@ template<typename CharT, bool positive> [[nodiscard]] auto lookahead_token_match
         return nullptr; 
     }
 
-#line 2156 "regex.h2"
+#line 2158 "regex.h2"
     auto range_token::parse_modifier(parse_context& ctx) & -> void{
         if (ctx.peek() == '?') {
             kind = range_flags::not_greedy;
@@ -3523,7 +3525,7 @@ template<typename CharT, bool positive> [[nodiscard]] auto lookahead_token_match
         }}
     }
 
-#line 2167 "regex.h2"
+#line 2169 "regex.h2"
     [[nodiscard]] auto range_token::gen_mod_string() const& -> std::string{
         if (kind == range_flags::not_greedy) {
             return "?"; 
@@ -3536,7 +3538,7 @@ template<typename CharT, bool positive> [[nodiscard]] auto lookahead_token_match
         }}
     }
 
-#line 2179 "regex.h2"
+#line 2181 "regex.h2"
     [[nodiscard]] auto range_token::gen_range_string() const& -> std::string{
         std::string r {""}; 
         if (min_count == max_count) {
@@ -3555,7 +3557,7 @@ template<typename CharT, bool positive> [[nodiscard]] auto lookahead_token_match
         return r; 
     }
 
-#line 2197 "regex.h2"
+#line 2199 "regex.h2"
     auto range_token::generate_code(generation_context& ctx) const -> void{
         auto inner_name {ctx.generate_func(inner_token)}; 
         std::set<int> groups {}; 
@@ -3566,14 +3568,14 @@ template<typename CharT, bool positive> [[nodiscard]] auto lookahead_token_match
         ctx.add_statefull(next_name, ("cpp2::regex::range_token_matcher<char, " + cpp2::to_string(min_count) + ", " + cpp2::to_string(max_count) + ", " + cpp2::to_string(kind) + ">::match(" + cpp2::to_string(ctx.match_parameters()) + ", " + cpp2::to_string(cpp2::move(inner_name)) + ", " + cpp2::to_string(cpp2::move(reset_name)) + ", other, " + cpp2::to_string(next_name) + ")"));
     }
 
-#line 2207 "regex.h2"
+#line 2209 "regex.h2"
     auto range_token::add_groups(std::set<int>& groups) const -> void{
         (*cpp2::impl::assert_not_null(inner_token)).add_groups(groups);
     }
 
     range_token::~range_token() noexcept{}
 
-#line 2215 "regex.h2"
+#line 2217 "regex.h2"
     template <typename CharT, int min_count, int max_count, int kind> template<typename Iter> [[nodiscard]] auto range_token_matcher<CharT,min_count,max_count,kind>::match(Iter const& cur, auto& ctx, auto const& inner, auto const& reset_func, auto const& end_func, auto const& tail) -> auto{
         if (range_flags::possessive == kind) {
             return match_possessive(cur, ctx, inner, end_func, tail); 
@@ -3586,26 +3588,26 @@ template<typename CharT, bool positive> [[nodiscard]] auto lookahead_token_match
         }}
     }
 
-#line 2227 "regex.h2"
+#line 2229 "regex.h2"
     template <typename CharT, int min_count, int max_count, int kind> [[nodiscard]] auto range_token_matcher<CharT,min_count,max_count,kind>::is_below_upper_bound(cpp2::impl::in<int> count) -> bool{
         if (-1 == max_count) {return true; }
         else {return cpp2::impl::cmp_less(count,max_count); }
     }
 
-#line 2232 "regex.h2"
+#line 2234 "regex.h2"
     template <typename CharT, int min_count, int max_count, int kind> [[nodiscard]] auto range_token_matcher<CharT,min_count,max_count,kind>::is_below_lower_bound(cpp2::impl::in<int> count) -> bool{
         if (-1 == min_count) {return false; }
         else {return cpp2::impl::cmp_less(count,min_count); }
     }
 
-#line 2237 "regex.h2"
+#line 2239 "regex.h2"
     template <typename CharT, int min_count, int max_count, int kind> [[nodiscard]] auto range_token_matcher<CharT,min_count,max_count,kind>::is_in_range(cpp2::impl::in<int> count) -> bool{
         if (-1 != min_count && cpp2::impl::cmp_less(count,min_count)) {return false; }
         if (-1 != max_count && cpp2::impl::cmp_greater(count,max_count)) {return false; }
         return true; 
     }
 
-#line 2243 "regex.h2"
+#line 2245 "regex.h2"
     template <typename CharT, int min_count, int max_count, int kind> template<typename Iter> [[nodiscard]] auto range_token_matcher<CharT,min_count,max_count,kind>::match_min_count(Iter const& cur, auto& ctx, auto const& inner, auto const& end_func, int& count_r) -> auto{// TODO: count_r as out parameter introduces a performance loss.
         auto res {ctx.pass(cur)}; 
         auto count {0}; 
@@ -3621,7 +3623,7 @@ template<typename CharT, bool positive> [[nodiscard]] auto lookahead_token_match
         return res; 
     }
 
-#line 2258 "regex.h2"
+#line 2260 "regex.h2"
     template <typename CharT, int min_count, int max_count, int kind> template<typename Iter> [[nodiscard]] auto range_token_matcher<CharT,min_count,max_count,kind>::match_greedy(cpp2::impl::in<int> count, Iter const& cur, Iter const& last_valid, auto& ctx, auto const& inner, auto const& reset_func, auto const& end_func, auto const& other) -> match_return<Iter>{
         auto inner_call {[_0 = (count + 1), _1 = (cur), _2 = (inner), _3 = (reset_func), _4 = (end_func), _5 = (other)](auto const& tail_cur, auto& tail_ctx) -> auto{
             return match_greedy(_0, tail_cur, _1, tail_ctx, _2, _3, _4, _5); 
@@ -3650,7 +3652,7 @@ template<typename CharT, bool positive> [[nodiscard]] auto lookahead_token_match
         return r; 
     }
 
-#line 2286 "regex.h2"
+#line 2288 "regex.h2"
     template <typename CharT, int min_count, int max_count, int kind> template<typename Iter> [[nodiscard]] auto range_token_matcher<CharT,min_count,max_count,kind>::match_possessive(Iter const& cur, auto& ctx, auto const& inner, auto const& end_func, auto const& other) -> match_return<Iter>{
         auto count {0}; 
         auto r {match_min_count(cur, ctx, inner, end_func, count)}; 
@@ -3675,7 +3677,7 @@ template<typename CharT, bool positive> [[nodiscard]] auto lookahead_token_match
         return other(cpp2::move(pos), ctx, end_func); 
     }
 
-#line 2310 "regex.h2"
+#line 2312 "regex.h2"
     template <typename CharT, int min_count, int max_count, int kind> template<typename Iter> [[nodiscard]] auto range_token_matcher<CharT,min_count,max_count,kind>::match_not_greedy(Iter const& cur, auto& ctx, auto const& inner, auto const& end_func, auto const& other) -> match_return<Iter>{
         auto count {0}; 
         auto start {match_min_count(cur, ctx, inner, end_func, count)}; 
@@ -3701,7 +3703,7 @@ template<typename CharT, bool positive> [[nodiscard]] auto lookahead_token_match
         return other(cpp2::move(pos), ctx, end_func); // Upper bound reached.
     }
 
-#line 2341 "regex.h2"
+#line 2343 "regex.h2"
     [[nodiscard]] auto special_range_token::parse(parse_context& ctx) -> token_ptr{
         auto r {CPP2_UFCS_TEMPLATE(cpp2_new<special_range_token>)(cpp2::shared)}; 
         char symbol {'\0'}; 
@@ -3724,7 +3726,7 @@ template<typename CharT, bool positive> [[nodiscard]] auto lookahead_token_match
 
         if (!(ctx.has_token())) {return ctx.error(("'" + cpp2::to_string(ctx.current()) + "' without previous element.")); }
 
-#line 2364 "regex.h2"
+#line 2366 "regex.h2"
         (*cpp2::impl::assert_not_null(r)).parse_modifier(ctx);
 
         (*cpp2::impl::assert_not_null(r)).inner_token = ctx.pop_token();
@@ -3734,7 +3736,7 @@ template<typename CharT, bool positive> [[nodiscard]] auto lookahead_token_match
 
     special_range_token::~special_range_token() noexcept{}
 
-#line 2376 "regex.h2"
+#line 2378 "regex.h2"
 [[nodiscard]] auto word_boundary_token_parse(parse_context& ctx) -> token_ptr{
     if (ctx.current() != '\\') {return nullptr; }
 
@@ -3751,7 +3753,7 @@ template<typename CharT, bool positive> [[nodiscard]] auto lookahead_token_match
     }}
 }
 
-#line 2392 "regex.h2"
+#line 2394 "regex.h2"
 template<typename CharT, bool negate> [[nodiscard]] auto word_boundary_token_matcher(auto& cur, auto& ctx) -> bool{
     word_class<CharT> words {}; 
     auto is_match {false}; 
@@ -3776,32 +3778,32 @@ template<typename CharT, bool negate> [[nodiscard]] auto word_boundary_token_mat
     return is_match; 
 }
 
-#line 2435 "regex.h2"
+#line 2437 "regex.h2"
         template <typename CharT, typename matcher_wrapper> template <typename Iter> regular_expression<CharT,matcher_wrapper>::search_return<Iter>::search_return(cpp2::impl::in<bool> matched_, context<Iter> const& ctx_, Iter const& pos_)
             : matched{ matched_ }
             , ctx{ ctx_ }
             , pos{ unsafe_narrow<int>(std::distance(ctx_.begin, pos_)) }{
 
-#line 2439 "regex.h2"
+#line 2441 "regex.h2"
         }
 
-#line 2441 "regex.h2"
+#line 2443 "regex.h2"
         template <typename CharT, typename matcher_wrapper> template <typename Iter> [[nodiscard]] auto regular_expression<CharT,matcher_wrapper>::search_return<Iter>::group_number() const& -> auto { return ctx.size();  }
-#line 2442 "regex.h2"
+#line 2444 "regex.h2"
         template <typename CharT, typename matcher_wrapper> template <typename Iter> [[nodiscard]] auto regular_expression<CharT,matcher_wrapper>::search_return<Iter>::group(cpp2::impl::in<int> g) const& -> auto { return ctx.get_group_string(g); }
-#line 2443 "regex.h2"
+#line 2445 "regex.h2"
         template <typename CharT, typename matcher_wrapper> template <typename Iter> [[nodiscard]] auto regular_expression<CharT,matcher_wrapper>::search_return<Iter>::group_start(cpp2::impl::in<int> g) const& -> auto { return ctx.get_group_start(g); }
-#line 2444 "regex.h2"
+#line 2446 "regex.h2"
         template <typename CharT, typename matcher_wrapper> template <typename Iter> [[nodiscard]] auto regular_expression<CharT,matcher_wrapper>::search_return<Iter>::group_end(cpp2::impl::in<int> g) const& -> auto { return ctx.get_group_end(g); }
 
-#line 2446 "regex.h2"
+#line 2448 "regex.h2"
         template <typename CharT, typename matcher_wrapper> template <typename Iter> [[nodiscard]] auto regular_expression<CharT,matcher_wrapper>::search_return<Iter>::group(cpp2::impl::in<bstring<CharT>> g) const& -> auto { return group(get_group_id(g)); }
-#line 2447 "regex.h2"
+#line 2449 "regex.h2"
         template <typename CharT, typename matcher_wrapper> template <typename Iter> [[nodiscard]] auto regular_expression<CharT,matcher_wrapper>::search_return<Iter>::group_start(cpp2::impl::in<bstring<CharT>> g) const& -> auto { return group_start(get_group_id(g)); }
-#line 2448 "regex.h2"
+#line 2450 "regex.h2"
         template <typename CharT, typename matcher_wrapper> template <typename Iter> [[nodiscard]] auto regular_expression<CharT,matcher_wrapper>::search_return<Iter>::group_end(cpp2::impl::in<bstring<CharT>> g) const& -> auto { return group_end(get_group_id(g)); }
 
-#line 2450 "regex.h2"
+#line 2452 "regex.h2"
         template <typename CharT, typename matcher_wrapper> template <typename Iter> [[nodiscard]] auto regular_expression<CharT,matcher_wrapper>::search_return<Iter>::get_group_id(cpp2::impl::in<bstring<CharT>> g) const& -> auto{
             auto group_id {matcher<Iter>::get_named_group_index(g)}; 
             if (-1 == group_id) {
@@ -3810,13 +3812,13 @@ template<typename CharT, bool negate> [[nodiscard]] auto word_boundary_token_mat
             return group_id; 
         }
 
-#line 2459 "regex.h2"
+#line 2461 "regex.h2"
     template <typename CharT, typename matcher_wrapper> [[nodiscard]] auto regular_expression<CharT,matcher_wrapper>::match(cpp2::impl::in<bview<CharT>> str) const& -> auto { return match(str.begin(), str.end()); }
-#line 2460 "regex.h2"
+#line 2462 "regex.h2"
     template <typename CharT, typename matcher_wrapper> [[nodiscard]] auto regular_expression<CharT,matcher_wrapper>::match(cpp2::impl::in<bview<CharT>> str, auto const& start) const& -> auto { return match(get_iter(str, start), str.end()); }
-#line 2461 "regex.h2"
+#line 2463 "regex.h2"
     template <typename CharT, typename matcher_wrapper> [[nodiscard]] auto regular_expression<CharT,matcher_wrapper>::match(cpp2::impl::in<bview<CharT>> str, auto const& start, auto const& length) const& -> auto { return match(get_iter(str, start), get_iter(str, start + length)); }
-#line 2462 "regex.h2"
+#line 2464 "regex.h2"
     template <typename CharT, typename matcher_wrapper> template<typename Iter> [[nodiscard]] auto regular_expression<CharT,matcher_wrapper>::match(Iter const& start, Iter const& end) const& -> search_return<Iter>{
         context<Iter> ctx {start, end}; 
 
@@ -3824,13 +3826,13 @@ template<typename CharT, bool negate> [[nodiscard]] auto word_boundary_token_mat
         return search_return<Iter>(r.matched && r.pos == end, cpp2::move(ctx), r.pos); 
     }
 
-#line 2469 "regex.h2"
+#line 2471 "regex.h2"
     template <typename CharT, typename matcher_wrapper> [[nodiscard]] auto regular_expression<CharT,matcher_wrapper>::search(cpp2::impl::in<bview<CharT>> str) const& -> auto { return search(str.begin(), str.end()); }
-#line 2470 "regex.h2"
+#line 2472 "regex.h2"
     template <typename CharT, typename matcher_wrapper> [[nodiscard]] auto regular_expression<CharT,matcher_wrapper>::search(cpp2::impl::in<bview<CharT>> str, auto const& start) const& -> auto { return search(get_iter(str, start), str.end()); }
-#line 2471 "regex.h2"
+#line 2473 "regex.h2"
     template <typename CharT, typename matcher_wrapper> [[nodiscard]] auto regular_expression<CharT,matcher_wrapper>::search(cpp2::impl::in<bview<CharT>> str, auto const& start, auto const& length) const& -> auto { return search(get_iter(str, start), get_iter(str, start + length)); }
-#line 2472 "regex.h2"
+#line 2474 "regex.h2"
     template <typename CharT, typename matcher_wrapper> template<typename Iter> [[nodiscard]] auto regular_expression<CharT,matcher_wrapper>::search(Iter const& start, Iter const& end) const& -> search_return<Iter>{
         context<Iter> ctx {start, end}; 
         auto r {CPP2_UFCS(fail)(ctx)}; 
@@ -3850,10 +3852,10 @@ template<typename CharT, bool negate> [[nodiscard]] auto word_boundary_token_mat
         return search_return<Iter>(r.matched, cpp2::move(ctx), cpp2::move(r).pos); 
     }
 
-#line 2491 "regex.h2"
+#line 2493 "regex.h2"
     template <typename CharT, typename matcher_wrapper> [[nodiscard]] auto regular_expression<CharT,matcher_wrapper>::to_string() const& -> auto { return matcher_wrapper::to_string();  }
 
-#line 2496 "regex.h2"
+#line 2498 "regex.h2"
     template <typename CharT, typename matcher_wrapper> [[nodiscard]] auto regular_expression<CharT,matcher_wrapper>::get_iter(cpp2::impl::in<bview<CharT>> str, auto const& pos) -> auto{
         if (cpp2::impl::cmp_less(pos,str.size())) {
             return str.begin() + pos; 
@@ -3863,15 +3865,15 @@ template<typename CharT, bool negate> [[nodiscard]] auto word_boundary_token_mat
         }
     }
 
-#line 2524 "regex.h2"
+#line 2526 "regex.h2"
     template <typename Error_out> regex_generator<Error_out>::regex_generator(cpp2::impl::in<std::string_view> r, Error_out const& e)
         : regex{ r }
         , error_out{ e }{
 
-#line 2527 "regex.h2"
+#line 2529 "regex.h2"
     }
 
-#line 2529 "regex.h2"
+#line 2531 "regex.h2"
     template <typename Error_out> [[nodiscard]] auto regex_generator<Error_out>::parse() & -> std::string{
 
         // Extract modifiers and adapt regex.
@@ -3907,7 +3909,7 @@ template<typename CharT, bool negate> [[nodiscard]] auto word_boundary_token_mat
         return source; 
     }
 
-#line 2564 "regex.h2"
+#line 2566 "regex.h2"
     template <typename Error_out> auto regex_generator<Error_out>::extract_modifiers() & -> void{
         if (regex.find_first_of("'/") == 0) {
             char mod_token {CPP2_ASSERT_IN_BOUNDS_LITERAL(regex, 0)}; 
@@ -3922,7 +3924,7 @@ template<typename CharT, bool negate> [[nodiscard]] auto word_boundary_token_mat
         }
     }
 
-#line 2579 "regex.h2"
+#line 2581 "regex.h2"
 template<typename Err> [[nodiscard]] auto generate_regex(cpp2::impl::in<std::string_view> regex, Err const& err) -> std::string{
     regex_generator<Err> parser {regex, err}; 
     auto r {parser.parse()}; 
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_01_char_matcher.cpp.execution b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_01_char_matcher.cpp.execution
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_01_char_matcher.cpp.execution
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_01_char_matcher.cpp.execution
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_01_char_matcher.cpp.output b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_01_char_matcher.cpp.output
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_01_char_matcher.cpp.output
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_01_char_matcher.cpp.output
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_02_ranges.cpp.execution b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_02_ranges.cpp.execution
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_02_ranges.cpp.execution
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_02_ranges.cpp.execution
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_02_ranges.cpp.output b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_02_ranges.cpp.output
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_02_ranges.cpp.output
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_02_ranges.cpp.output
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_03_wildcard.cpp.execution b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_03_wildcard.cpp.execution
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_03_wildcard.cpp.execution
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_03_wildcard.cpp.execution
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_03_wildcard.cpp.output b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_03_wildcard.cpp.output
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_03_wildcard.cpp.output
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_03_wildcard.cpp.output
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_04_start_end.cpp.execution b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_04_start_end.cpp.execution
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_04_start_end.cpp.execution
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_04_start_end.cpp.execution
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_04_start_end.cpp.output b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_04_start_end.cpp.output
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_04_start_end.cpp.output
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_04_start_end.cpp.output
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_05_classes.cpp.execution b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_05_classes.cpp.execution
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_05_classes.cpp.execution
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_05_classes.cpp.execution
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_05_classes.cpp.output b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_05_classes.cpp.output
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_05_classes.cpp.output
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_05_classes.cpp.output
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_06_boundaries.cpp.execution b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_06_boundaries.cpp.execution
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_06_boundaries.cpp.execution
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_06_boundaries.cpp.execution
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_06_boundaries.cpp.output b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_06_boundaries.cpp.output
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_06_boundaries.cpp.output
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_06_boundaries.cpp.output
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_07_short_classes.cpp.execution b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_07_short_classes.cpp.execution
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_07_short_classes.cpp.execution
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_07_short_classes.cpp.execution
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_07_short_classes.cpp.output b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_07_short_classes.cpp.output
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_07_short_classes.cpp.output
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_07_short_classes.cpp.output
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_08_alternatives.cpp.execution b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_08_alternatives.cpp.execution
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_08_alternatives.cpp.execution
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_08_alternatives.cpp.execution
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_08_alternatives.cpp.output b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_08_alternatives.cpp.output
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_08_alternatives.cpp.output
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_08_alternatives.cpp.output
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_09_groups.cpp.execution b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_09_groups.cpp.execution
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_09_groups.cpp.execution
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_09_groups.cpp.execution
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_09_groups.cpp.output b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_09_groups.cpp.output
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_09_groups.cpp.output
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_09_groups.cpp.output
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_10_escapes.cpp.execution b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_10_escapes.cpp.execution
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_10_escapes.cpp.execution
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_10_escapes.cpp.execution
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_10_escapes.cpp.output b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_10_escapes.cpp.output
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_10_escapes.cpp.output
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_10_escapes.cpp.output
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_11_group_references.cpp.execution b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_11_group_references.cpp.execution
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_11_group_references.cpp.execution
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_11_group_references.cpp.execution
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_11_group_references.cpp.output b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_11_group_references.cpp.output
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_11_group_references.cpp.output
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_11_group_references.cpp.output
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_12_case_insensitive.cpp.execution b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_12_case_insensitive.cpp.execution
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_12_case_insensitive.cpp.execution
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_12_case_insensitive.cpp.execution
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_12_case_insensitive.cpp.output b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_12_case_insensitive.cpp.output
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_12_case_insensitive.cpp.output
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_12_case_insensitive.cpp.output
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_13_posessive_modifier.cpp.execution b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_13_posessive_modifier.cpp.execution
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_13_posessive_modifier.cpp.execution
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_13_posessive_modifier.cpp.execution
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_13_posessive_modifier.cpp.output b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_13_posessive_modifier.cpp.output
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_13_posessive_modifier.cpp.output
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_13_posessive_modifier.cpp.output
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_14_multiline_modifier.cpp.execution b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_14_multiline_modifier.cpp.execution
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_14_multiline_modifier.cpp.execution
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_14_multiline_modifier.cpp.execution
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_14_multiline_modifier.cpp.output b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_14_multiline_modifier.cpp.output
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_14_multiline_modifier.cpp.output
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_14_multiline_modifier.cpp.output
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_15_group_modifiers.cpp.execution b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_15_group_modifiers.cpp.execution
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_15_group_modifiers.cpp.execution
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_15_group_modifiers.cpp.execution
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_15_group_modifiers.cpp.output b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_15_group_modifiers.cpp.output
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_15_group_modifiers.cpp.output
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_15_group_modifiers.cpp.output
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_16_perl_syntax_modifier.cpp.execution b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_16_perl_syntax_modifier.cpp.execution
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_16_perl_syntax_modifier.cpp.execution
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_16_perl_syntax_modifier.cpp.execution
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_16_perl_syntax_modifier.cpp.output b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_16_perl_syntax_modifier.cpp.output
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_16_perl_syntax_modifier.cpp.output
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_16_perl_syntax_modifier.cpp.output
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_17_comments.cpp.execution b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_17_comments.cpp.execution
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_17_comments.cpp.execution
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_17_comments.cpp.execution
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_17_comments.cpp.output b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_17_comments.cpp.output
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_17_comments.cpp.output
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_17_comments.cpp.output
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_18_branch_reset.cpp.execution b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_18_branch_reset.cpp.execution
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_18_branch_reset.cpp.execution
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_18_branch_reset.cpp.execution
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_18_branch_reset.cpp.output b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_18_branch_reset.cpp.output
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_18_branch_reset.cpp.output
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_18_branch_reset.cpp.output
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_19_lookahead.cpp.execution b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_19_lookahead.cpp.execution
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_19_lookahead.cpp.execution
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_19_lookahead.cpp.execution
diff --git a/regression-tests/test-results/gcc-13/pure2-regex_19_lookahead.cpp.output b/regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_19_lookahead.cpp.output
similarity index 100%
rename from regression-tests/test-results/gcc-13/pure2-regex_19_lookahead.cpp.output
rename to regression-tests/test-results/apple-clang-14-c++2b/pure2-regex_19_lookahead.cpp.output
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_01_char_matcher.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_01_char_matcher.cpp.execution
new file mode 100644
index 000000000..af124736e
--- /dev/null
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_01_char_matcher.cpp.execution
@@ -0,0 +1,14 @@
+Running tests_01_char_matcher:
+01_y: OK regex: abc parsed_regex: abc str: abc result_expr: $& expected_results abc
+02_y: OK regex: abc parsed_regex: abc str: abc result_expr: $-[0] expected_results 0
+03_y: OK regex: abc parsed_regex: abc str: abc result_expr: $+[0] expected_results 3
+04_n: OK regex: abc parsed_regex: abc str: xbc result_expr: - expected_results -
+05_n: OK regex: abc parsed_regex: abc str: axc result_expr: - expected_results -
+06_n: OK regex: abc parsed_regex: abc str: abx result_expr: - expected_results -
+07_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $& expected_results abc
+08_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $-[0] expected_results 1
+09_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $+[0] expected_results 4
+10_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $& expected_results abc
+11_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $-[0] expected_results 2
+12_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $+[0] expected_results 5
+
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_01_char_matcher.cpp.output b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_01_char_matcher.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_02_ranges.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_02_ranges.cpp.execution
new file mode 100644
index 000000000..dc0b36002
--- /dev/null
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_02_ranges.cpp.execution
@@ -0,0 +1,42 @@
+Running tests_02_ranges:
+01_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $& expected_results abc
+02_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $-[0] expected_results 0
+03_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $+[0] expected_results 3
+04_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $& expected_results abc
+05_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $-[0] expected_results 0
+06_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $+[0] expected_results 3
+07_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $& expected_results abbc
+08_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $-[0] expected_results 0
+09_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $+[0] expected_results 4
+10_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $& expected_results abbbbc
+11_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $-[0] expected_results 0
+12_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $+[0] expected_results 6
+13_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $& expected_results abbbbc
+14_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $-[0] expected_results 0
+15_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $+[0] expected_results 6
+16_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $& expected_results abbc
+17_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $-[0] expected_results 0
+18_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $+[0] expected_results 4
+19_n: OK regex: ab+bc parsed_regex: ab+bc str: abc result_expr: - expected_results -
+20_n: OK regex: ab+bc parsed_regex: ab+bc str: abq result_expr: - expected_results -
+21_n: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abq result_expr: - expected_results -
+22_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $& expected_results abbbbc
+23_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $-[0] expected_results 0
+24_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $+[0] expected_results 6
+25_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $& expected_results abbbbc
+26_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $-[0] expected_results 0
+27_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $+[0] expected_results 6
+28_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $& expected_results abbbbc
+29_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $-[0] expected_results 0
+30_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $+[0] expected_results 6
+31_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $& expected_results abbbbc
+32_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $-[0] expected_results 0
+33_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $+[0] expected_results 6
+34_n: OK regex: ab{4,5}bc parsed_regex: ab{4,5}bc str: abbbbc result_expr: - expected_results -
+35_y: OK regex: ab?bc parsed_regex: ab?bc str: abbc result_expr: $& expected_results abbc
+36_y: OK regex: ab?bc parsed_regex: ab?bc str: abc result_expr: $& expected_results abc
+37_y: OK regex: ab{0,1}bc parsed_regex: ab{0,1}bc str: abc result_expr: $& expected_results abc
+38_n: OK regex: ab?bc parsed_regex: ab?bc str: abbbbc result_expr: - expected_results -
+39_y: OK regex: ab?c parsed_regex: ab?c str: abc result_expr: $& expected_results abc
+40_y: OK regex: ab{0,1}c parsed_regex: ab{0,1}c str: abc result_expr: $& expected_results abc
+
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_02_ranges.cpp.output b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_02_ranges.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_03_wildcard.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_03_wildcard.cpp.execution
new file mode 100644
index 000000000..f3f0ea9cc
--- /dev/null
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_03_wildcard.cpp.execution
@@ -0,0 +1,22 @@
+Running tests_03_wildcard:
+01_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $& expected_results a
+02_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $-[0] expected_results 0
+03_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $+[0] expected_results 1
+04_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $& expected_results abbb
+05_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $-[0] expected_results 0
+06_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+07_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $& expected_results a
+08_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $-[0] expected_results 0
+09_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $+[0] expected_results 1
+10_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $& expected_results abbb
+11_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $-[0] expected_results 0
+12_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+13_y: OK Warning: Parsed regex does not match. regex: \N{ 3 , 4 } parsed_regex: \N{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+14_y: OK regex: a.c parsed_regex: a.c str: abc result_expr: $& expected_results abc
+15_y: OK regex: a.c parsed_regex: a.c str: axc result_expr: $& expected_results axc
+16_y: OK regex: a\Nc parsed_regex: a\Nc str: abc result_expr: $& expected_results abc
+17_y: OK regex: a.*c parsed_regex: a.*c str: axyzc result_expr: $& expected_results axyzc
+18_y: OK regex: a\N*c parsed_regex: a\N*c str: axyzc result_expr: $& expected_results axyzc
+19_n: OK regex: a.*c parsed_regex: a.*c str: axyzd result_expr: - expected_results -
+20_n: OK regex: a\N*c parsed_regex: a\N*c str: axyzd result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_03_wildcard.cpp.output b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_03_wildcard.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_04_start_end.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_04_start_end.cpp.execution
new file mode 100644
index 000000000..6fef36434
--- /dev/null
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_04_start_end.cpp.execution
@@ -0,0 +1,11 @@
+Running tests_04_start_end:
+01_y: OK regex: ^abc$ parsed_regex: ^abc$ str: abc result_expr: $& expected_results abc
+02_n: OK regex: ^abc$ parsed_regex: ^abc$ str: abcc result_expr: - expected_results -
+03_y: OK regex: ^abc parsed_regex: ^abc str: abcc result_expr: $& expected_results abc
+04_n: OK regex: ^abc$ parsed_regex: ^abc$ str: aabc result_expr: - expected_results -
+05_y: OK regex: abc$ parsed_regex: abc$ str: aabc result_expr: $& expected_results abc
+06_n: OK regex: abc$ parsed_regex: abc$ str: aabcd result_expr: - expected_results -
+07_y: OK regex: ^ parsed_regex: ^ str: abc result_expr: $& expected_results 
+08_y: OK regex: $ parsed_regex: $ str: abc result_expr: $& expected_results 
+09_n: OK regex: $b parsed_regex: $b str: b result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_04_start_end.cpp.output b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_04_start_end.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_05_classes.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_05_classes.cpp.execution
new file mode 100644
index 000000000..306bf3395
--- /dev/null
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_05_classes.cpp.execution
@@ -0,0 +1,21 @@
+Running tests_05_classes:
+01_n: OK regex: a[bc]d parsed_regex: a[bc]d str: abc result_expr: - expected_results -
+02_y: OK regex: a[bc]d parsed_regex: a[bc]d str: abd result_expr: $& expected_results abd
+03_y: OK regex: a[b]d parsed_regex: a[b]d str: abd result_expr: $& expected_results abd
+04_y: OK regex: [a][b][d] parsed_regex: [a][b][d] str: abd result_expr: $& expected_results abd
+05_y: OK regex: .[b]. parsed_regex: .[b]. str: abd result_expr: $& expected_results abd
+06_n: OK regex: .[b]. parsed_regex: .[b]. str: aBd result_expr: - expected_results -
+07_n: OK regex: a[b-d]e parsed_regex: a[b-d]e str: abd result_expr: - expected_results -
+08_y: OK regex: a[b-d]e parsed_regex: a[b-d]e str: ace result_expr: $& expected_results ace
+09_y: OK regex: a[b-d] parsed_regex: a[b-d] str: aac result_expr: $& expected_results ac
+10_y: OK regex: a[-b] parsed_regex: a[-b] str: a- result_expr: $& expected_results a-
+11_y: OK regex: a[b-] parsed_regex: a[b-] str: a- result_expr: $& expected_results a-
+12_y: OK regex: a] parsed_regex: a] str: a] result_expr: $& expected_results a]
+13_y: OK regex: a[]]b parsed_regex: a[]]b str: a]b result_expr: $& expected_results a]b
+14_y: OK regex: a[^bc]d parsed_regex: a[^bc]d str: aed result_expr: $& expected_results aed
+15_n: OK regex: a[^bc]d parsed_regex: a[^bc]d str: abd result_expr: - expected_results -
+16_y: OK regex: a[^-b]c parsed_regex: a[^-b]c str: adc result_expr: $& expected_results adc
+17_n: OK regex: a[^-b]c parsed_regex: a[^-b]c str: a-c result_expr: - expected_results -
+18_n: OK regex: a[^]b]c parsed_regex: a[^]b]c str: a]c result_expr: - expected_results -
+19_y: OK regex: a[^]b]c parsed_regex: a[^]b]c str: adc result_expr: $& expected_results adc
+
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_05_classes.cpp.output b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_05_classes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_06_boundaries.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_06_boundaries.cpp.execution
new file mode 100644
index 000000000..420a4c587
--- /dev/null
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_06_boundaries.cpp.execution
@@ -0,0 +1,19 @@
+Running tests_06_boundaries:
+01_y: OK regex: \ba\b parsed_regex: \ba\b str: a- result_expr: - expected_results -
+02_y: OK regex: \ba\b parsed_regex: \ba\b str: -a result_expr: - expected_results -
+03_y: OK regex: \ba\b parsed_regex: \ba\b str: -a- result_expr: - expected_results -
+04_n: OK regex: \by\b parsed_regex: \by\b str: xy result_expr: - expected_results -
+05_n: OK regex: \by\b parsed_regex: \by\b str: yz result_expr: - expected_results -
+06_n: OK regex: \by\b parsed_regex: \by\b str: xyz result_expr: - expected_results -
+07_n: OK regex: \Ba\B parsed_regex: \Ba\B str: a- result_expr: - expected_results -
+08_n: OK regex: \Ba\B parsed_regex: \Ba\B str: -a result_expr: - expected_results -
+09_n: OK regex: \Ba\B parsed_regex: \Ba\B str: -a- result_expr: - expected_results -
+10_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: - expected_results -
+11_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: $-[0] expected_results 1
+12_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: $+[0] expected_results 2
+13_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: - expected_results -
+14_y: OK regex: \by\B parsed_regex: \by\B str: yz result_expr: - expected_results -
+15_y: OK regex: \By\B parsed_regex: \By\B str: xyz result_expr: - expected_results -
+16_n: OK regex: \b parsed_regex: \b str:  result_expr: - expected_results -
+17_y: OK regex: \B parsed_regex: \B str:  result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_06_boundaries.cpp.output b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_06_boundaries.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_07_short_classes.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_07_short_classes.cpp.execution
new file mode 100644
index 000000000..519c05f92
--- /dev/null
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_07_short_classes.cpp.execution
@@ -0,0 +1,26 @@
+Running tests_07_short_classes:
+01_y: OK regex: \w parsed_regex: \w str: a result_expr: - expected_results -
+02_n: OK regex: \w parsed_regex: \w str: - result_expr: - expected_results -
+03_n: OK regex: \W parsed_regex: \W str: a result_expr: - expected_results -
+04_y: OK regex: \W parsed_regex: \W str: - result_expr: - expected_results -
+05_y: OK regex: a\sb parsed_regex: a\sb str: a b result_expr: - expected_results -
+06_n: OK regex: a\sb parsed_regex: a\sb str: a-b result_expr: - expected_results -
+07_n: OK regex: a\Sb parsed_regex: a\Sb str: a b result_expr: - expected_results -
+08_y: OK regex: a\Sb parsed_regex: a\Sb str: a-b result_expr: - expected_results -
+09_y: OK regex: \d parsed_regex: \d str: 1 result_expr: - expected_results -
+10_n: OK regex: \d parsed_regex: \d str: - result_expr: - expected_results -
+11_n: OK regex: \D parsed_regex: \D str: 1 result_expr: - expected_results -
+12_y: OK regex: \D parsed_regex: \D str: - result_expr: - expected_results -
+13_y: OK regex: [\w] parsed_regex: [\w] str: a result_expr: - expected_results -
+14_n: OK regex: [\w] parsed_regex: [\w] str: - result_expr: - expected_results -
+15_n: OK regex: [\W] parsed_regex: [\W] str: a result_expr: - expected_results -
+16_y: OK regex: [\W] parsed_regex: [\W] str: - result_expr: - expected_results -
+17_y: OK regex: a[\s]b parsed_regex: a[\s]b str: a b result_expr: - expected_results -
+18_n: OK regex: a[\s]b parsed_regex: a[\s]b str: a-b result_expr: - expected_results -
+19_n: OK regex: a[\S]b parsed_regex: a[\S]b str: a b result_expr: - expected_results -
+20_y: OK regex: a[\S]b parsed_regex: a[\S]b str: a-b result_expr: - expected_results -
+21_y: OK regex: [\d] parsed_regex: [\d] str: 1 result_expr: - expected_results -
+22_n: OK regex: [\d] parsed_regex: [\d] str: - result_expr: - expected_results -
+23_n: OK regex: [\D] parsed_regex: [\D] str: 1 result_expr: - expected_results -
+24_y: OK regex: [\D] parsed_regex: [\D] str: - result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_07_short_classes.cpp.output b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_07_short_classes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_08_alternatives.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_08_alternatives.cpp.execution
new file mode 100644
index 000000000..c12fd2afe
--- /dev/null
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_08_alternatives.cpp.execution
@@ -0,0 +1,4 @@
+Running tests_08_alternatives:
+01_y: OK regex: ab|cd parsed_regex: ab|cd str: abc result_expr: $& expected_results ab
+02_y: OK regex: ab|cd parsed_regex: ab|cd str: abcd result_expr: $& expected_results ab
+
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_08_alternatives.cpp.output b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_08_alternatives.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_09_groups.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_09_groups.cpp.execution
new file mode 100644
index 000000000..05df860f9
--- /dev/null
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_09_groups.cpp.execution
@@ -0,0 +1,13 @@
+Running tests_09_groups:
+01_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $&-$1 expected_results ef-
+02_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $-[0] expected_results 1
+03_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $+[0] expected_results 3
+04_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $-[1] expected_results 1
+05_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $+[1] expected_results 1
+06_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $&-$1-$2 expected_results a-a-a
+07_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $-[0]-$-[1]-$-[2] expected_results 0-0-0
+08_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $+[0]-$+[1]-$+[2] expected_results 1-1-1
+09_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $&-$1-$2 expected_results abc-a-c
+10_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $-[0]-$-[1]-$-[2] expected_results 0-0-2
+11_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $+[0]-$+[1]-$+[2] expected_results 3-1-3
+
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_09_groups.cpp.output b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_09_groups.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_10_escapes.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_10_escapes.cpp.execution
new file mode 100644
index 000000000..fe6e6efc9
--- /dev/null
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_10_escapes.cpp.execution
@@ -0,0 +1,39 @@
+Running tests_10_escapes:
+01_y: OK regex: a\(b parsed_regex: a\(b str: a(b result_expr: $&-$1 expected_results a(b-
+02_y: OK regex: a\(*b parsed_regex: a\(*b str: ab result_expr: $& expected_results ab
+03_y: OK regex: a\(*b parsed_regex: a\(*b str: a((b result_expr: $& expected_results a((b
+04_y: OK regex: a\\b parsed_regex: a\\b str: a\b result_expr: $& expected_results a\b
+05_y: OK regex: foo(\h+)bar parsed_regex: foo(\h+)bar str: foo	bar result_expr: $1 expected_results 	
+06_y: OK regex: (\H+)(\h) parsed_regex: (\H+)(\h) str: foo	bar result_expr: $1-$2 expected_results foo-	
+07_y: OK regex: (\h+)(\H) parsed_regex: (\h+)(\H) str: foo	bar result_expr: $1-$2 expected_results 	-b
+08_y: OK regex: foo(\h)bar parsed_regex: foo(\h)bar str: foo	bar result_expr: $1 expected_results 	
+09_y: OK regex: (\H)(\h) parsed_regex: (\H)(\h) str: foo	bar result_expr: $1-$2 expected_results o-	
+10_y: OK regex: (\h)(\H) parsed_regex: (\h)(\H) str: foo	bar result_expr: $1-$2 expected_results 	-b
+11_y: OK regex: foo(\v+)bar parsed_regex: foo(\v+)bar str: foo
+
+
+bar result_expr: $1 expected_results 
+
+
+
+12_y: OK regex: (\V+)(\v) parsed_regex: (\V+)(\v) str: foo
+
+
+bar result_expr: $1-$2 expected_results foo-
+13_y: OK regex: (\v+)(\V) parsed_regex: (\v+)(\V) str: foo
+
+
+bar result_expr: $1-$2 expected_results 
+
+
+-b
+14_y: OK regex: foo(\v)bar parsed_regex: foo(\v)bar str: foo
bar result_expr: $1 expected_results 
+15_y: OK regex: (\V)(\v) parsed_regex: (\V)(\v) str: foo
bar result_expr: $1-$2 expected_results o-
+16_y: OK regex: (\v)(\V) parsed_regex: (\v)(\V) str: foo
bar result_expr: $1-$2 expected_results 
-b
+17_y: OK regex: foo\t\n\r\f\a\ebar parsed_regex: foo\t\n\r\f\a\ebar str: foo	
+
bar result_expr: $& expected_results foo	
+
bar
+18_y: OK regex: foo\Kbar parsed_regex: foo\Kbar str: foobar result_expr: $& expected_results bar
+19_y: OK regex: \x41\x42 parsed_regex: \x41\x42 str: AB result_expr: $& expected_results AB
+20_y: OK regex: \101\o{102} parsed_regex: \101\o{102} str: AB result_expr: $& expected_results AB
+
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_10_escapes.cpp.output b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_10_escapes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_11_group_references.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_11_group_references.cpp.execution
new file mode 100644
index 000000000..724d0085a
--- /dev/null
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_11_group_references.cpp.execution
@@ -0,0 +1,26 @@
+Running tests_11_group_references:
+01_y: OK regex: (foo)(\g-2) parsed_regex: (foo)(\g-2) str: foofoo result_expr: $1-$2 expected_results foo-foo
+02_y: OK regex: (foo)(\g-2)(foo)(\g-2) parsed_regex: (foo)(\g-2)(foo)(\g-2) str: foofoofoofoo result_expr: $1-$2-$3-$4 expected_results foo-foo-foo-foo
+03_y: OK regex: (([abc]+) \g-1)(([abc]+) \g{-1}) parsed_regex: (([abc]+) \g-1)(([abc]+) \g{-1}) str: abc abccba cba result_expr: $2-$4 expected_results abc-cba
+04_y: OK regex: (a)(b)(c)\g1\g2\g3 parsed_regex: (a)(b)(c)\g1\g2\g3 str: abcabc result_expr: $1$2$3 expected_results abc
+05_y: OK regex: /(?'n'foo) \g{n}/ parsed_regex: /(?'n'foo) \g{n}/ str: ..foo foo.. result_expr: $1 expected_results foo
+06_y: OK regex: /(?'n'foo) \g{ n }/ parsed_regex: /(?'n'foo) \g{ n }/ str: ..foo foo.. result_expr: $1 expected_results foo
+07_yM: OK regex: /(?'n'foo) \g{n}/ parsed_regex: /(?'n'foo) \g{n}/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+08_y: OK regex: /(?<n>foo) \g{n}/ parsed_regex: /(?<n>foo) \g{n}/ str: ..foo foo.. result_expr: $1 expected_results foo
+09_yM: OK regex: /(?<n>foo) \g{n}/ parsed_regex: /(?<n>foo) \g{n}/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+10_y: OK regex: /(?<as>as) (\w+) \g{as} (\w+)/ parsed_regex: /(?<as>as) (\w+) \g{as} (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+11_y: OK regex: /(?'n'foo) \k<n>/ parsed_regex: /(?'n'foo) \k<n>/ str: ..foo foo.. result_expr: $1 expected_results foo
+12_yM: OK regex: /(?'n'foo) \k<n>/ parsed_regex: /(?'n'foo) \k<n>/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+13_y: OK regex: /(?<n>foo) \k'n'/ parsed_regex: /(?<n>foo) \k'n'/ str: ..foo foo.. result_expr: $1 expected_results foo
+14_yM: OK regex: /(?<n>foo) \k'n'/ parsed_regex: /(?<n>foo) \k'n'/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+15_yM: OK regex: /(?'a1'foo) \k'a1'/ parsed_regex: /(?'a1'foo) \k'a1'/ str: ..foo foo.. result_expr: $+{a1} expected_results foo
+16_yM: OK regex: /(?<a1>foo) \k<a1>/ parsed_regex: /(?<a1>foo) \k<a1>/ str: ..foo foo.. result_expr: $+{a1} expected_results foo
+17_yM: OK regex: /(?'_'foo) \k'_'/ parsed_regex: /(?'_'foo) \k'_'/ str: ..foo foo.. result_expr: $+{_} expected_results foo
+18_yM: OK regex: /(?<_>foo) \k<_>/ parsed_regex: /(?<_>foo) \k<_>/ str: ..foo foo.. result_expr: $+{_} expected_results foo
+19_yM: OK regex: /(?'_0_'foo) \k'_0_'/ parsed_regex: /(?'_0_'foo) \k'_0_'/ str: ..foo foo.. result_expr: $+{_0_} expected_results foo
+20_yM: OK regex: /(?<_0_>foo) \k<_0_>/ parsed_regex: /(?<_0_>foo) \k<_0_>/ str: ..foo foo.. result_expr: $+{_0_} expected_results foo
+21_y: OK regex: /(?<as>as) (\w+) \k<as> (\w+)/ parsed_regex: /(?<as>as) (\w+) \k<as> (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+22_y: OK regex: /(?<as>as) (\w+) \k{as} (\w+)/ parsed_regex: /(?<as>as) (\w+) \k{as} (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+23_y: OK regex: /(?<as>as) (\w+) \k'as' (\w+)/ parsed_regex: /(?<as>as) (\w+) \k'as' (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+24_y: OK regex: /(?<as>as) (\w+) \k{ as } (\w+)/ parsed_regex: /(?<as>as) (\w+) \k{ as } (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_11_group_references.cpp.output b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_11_group_references.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_12_case_insensitive.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_12_case_insensitive.cpp.execution
new file mode 100644
index 000000000..4939deb24
--- /dev/null
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_12_case_insensitive.cpp.execution
@@ -0,0 +1,121 @@
+Running tests_12_case_insensitive:
+01_y: OK regex: 'abc'i parsed_regex: 'abc'i str: ABC result_expr: $& expected_results ABC
+02_n: OK regex: 'abc'i parsed_regex: 'abc'i str: XBC result_expr: - expected_results -
+03_n: OK regex: 'abc'i parsed_regex: 'abc'i str: AXC result_expr: - expected_results -
+04_n: OK regex: 'abc'i parsed_regex: 'abc'i str: ABX result_expr: - expected_results -
+05_y: OK regex: 'abc'i parsed_regex: 'abc'i str: XABCY result_expr: $& expected_results ABC
+06_y: OK regex: 'abc'i parsed_regex: 'abc'i str: ABABC result_expr: $& expected_results ABC
+07_y: OK regex: 'ab*c'i parsed_regex: 'ab*c'i str: ABC result_expr: $& expected_results ABC
+08_y: OK regex: 'ab*bc'i parsed_regex: 'ab*bc'i str: ABC result_expr: $& expected_results ABC
+09_y: OK regex: 'ab*bc'i parsed_regex: 'ab*bc'i str: ABBC result_expr: $& expected_results ABBC
+10_y: OK regex: 'ab*?bc'i parsed_regex: 'ab*?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+11_y: OK regex: 'ab{0,}?bc'i parsed_regex: 'ab{0,}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+12_y: OK regex: 'ab+?bc'i parsed_regex: 'ab+?bc'i str: ABBC result_expr: $& expected_results ABBC
+13_n: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABC result_expr: - expected_results -
+14_n: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABQ result_expr: - expected_results -
+15_n: OK regex: 'ab{1,}bc'i parsed_regex: 'ab{1,}bc'i str: ABQ result_expr: - expected_results -
+16_y: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+17_y: OK regex: 'ab{1,}?bc'i parsed_regex: 'ab{1,}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+18_y: OK regex: 'ab{1,3}?bc'i parsed_regex: 'ab{1,3}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+19_y: OK regex: 'ab{3,4}?bc'i parsed_regex: 'ab{3,4}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+20_n: OK regex: 'ab{4,5}?bc'i parsed_regex: 'ab{4,5}?bc'i str: ABBBBC result_expr: - expected_results -
+21_y: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABBC result_expr: $& expected_results ABBC
+22_y: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABC result_expr: $& expected_results ABC
+23_y: OK regex: 'ab{0,1}?bc'i parsed_regex: 'ab{0,1}?bc'i str: ABC result_expr: $& expected_results ABC
+24_n: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABBBBC result_expr: - expected_results -
+25_y: OK regex: 'ab??c'i parsed_regex: 'ab??c'i str: ABC result_expr: $& expected_results ABC
+26_y: OK regex: 'ab{0,1}?c'i parsed_regex: 'ab{0,1}?c'i str: ABC result_expr: $& expected_results ABC
+27_y: OK regex: '^abc$'i parsed_regex: '^abc$'i str: ABC result_expr: $& expected_results ABC
+28_n: OK regex: '^abc$'i parsed_regex: '^abc$'i str: ABCC result_expr: - expected_results -
+29_y: OK regex: '^abc'i parsed_regex: '^abc'i str: ABCC result_expr: $& expected_results ABC
+30_n: OK regex: '^abc$'i parsed_regex: '^abc$'i str: AABC result_expr: - expected_results -
+31_y: OK regex: 'abc$'i parsed_regex: 'abc$'i str: AABC result_expr: $& expected_results ABC
+32_y: OK regex: '^'i parsed_regex: '^'i str: ABC result_expr: $& expected_results 
+33_y: OK regex: '$'i parsed_regex: '$'i str: ABC result_expr: $& expected_results 
+34_y: OK regex: 'a.c'i parsed_regex: 'a.c'i str: ABC result_expr: $& expected_results ABC
+35_y: OK regex: 'a.c'i parsed_regex: 'a.c'i str: AXC result_expr: $& expected_results AXC
+36_y: OK regex: 'a\Nc'i parsed_regex: 'a\Nc'i str: ABC result_expr: $& expected_results ABC
+37_y: OK regex: 'a.*?c'i parsed_regex: 'a.*?c'i str: AXYZC result_expr: $& expected_results AXYZC
+38_n: OK regex: 'a.*c'i parsed_regex: 'a.*c'i str: AXYZD result_expr: - expected_results -
+39_n: OK regex: 'a[bc]d'i parsed_regex: 'a[bc]d'i str: ABC result_expr: - expected_results -
+40_y: OK regex: 'a[bc]d'i parsed_regex: 'a[bc]d'i str: ABD result_expr: $& expected_results ABD
+41_n: OK regex: 'a[b-d]e'i parsed_regex: 'a[b-d]e'i str: ABD result_expr: - expected_results -
+42_y: OK regex: 'a[b-d]e'i parsed_regex: 'a[b-d]e'i str: ACE result_expr: $& expected_results ACE
+43_y: OK regex: 'a[b-d]'i parsed_regex: 'a[b-d]'i str: AAC result_expr: $& expected_results AC
+44_y: OK regex: 'a[-b]'i parsed_regex: 'a[-b]'i str: A- result_expr: $& expected_results A-
+45_y: OK regex: 'a[b-]'i parsed_regex: 'a[b-]'i str: A- result_expr: $& expected_results A-
+46_y: OK regex: 'a]'i parsed_regex: 'a]'i str: A] result_expr: $& expected_results A]
+47_y: OK regex: 'a[]]b'i parsed_regex: 'a[]]b'i str: A]B result_expr: $& expected_results A]B
+48_y: OK regex: 'a[^bc]d'i parsed_regex: 'a[^bc]d'i str: AED result_expr: $& expected_results AED
+49_n: OK regex: 'a[^bc]d'i parsed_regex: 'a[^bc]d'i str: ABD result_expr: - expected_results -
+50_y: OK regex: 'a[^-b]c'i parsed_regex: 'a[^-b]c'i str: ADC result_expr: $& expected_results ADC
+51_n: OK regex: 'a[^-b]c'i parsed_regex: 'a[^-b]c'i str: A-C result_expr: - expected_results -
+52_n: OK regex: 'a[^]b]c'i parsed_regex: 'a[^]b]c'i str: A]C result_expr: - expected_results -
+53_y: OK regex: 'a[^]b]c'i parsed_regex: 'a[^]b]c'i str: ADC result_expr: $& expected_results ADC
+54_y: OK regex: 'ab|cd'i parsed_regex: 'ab|cd'i str: ABC result_expr: $& expected_results AB
+55_y: OK regex: 'ab|cd'i parsed_regex: 'ab|cd'i str: ABCD result_expr: $& expected_results AB
+56_y: OK regex: '()ef'i parsed_regex: '()ef'i str: DEF result_expr: $&-$1 expected_results EF-
+57_n: OK regex: '$b'i parsed_regex: '$b'i str: B result_expr: - expected_results -
+58_y: OK regex: 'a\(b'i parsed_regex: 'a\(b'i str: A(B result_expr: $&-$1 expected_results A(B-
+59_y: OK regex: 'a\(*b'i parsed_regex: 'a\(*b'i str: AB result_expr: $& expected_results AB
+60_y: OK regex: 'a\(*b'i parsed_regex: 'a\(*b'i str: A((B result_expr: $& expected_results A((B
+61_y: OK regex: 'a\\b'i parsed_regex: 'a\\b'i str: A\B result_expr: $& expected_results A\B
+62_y: OK regex: '((a))'i parsed_regex: '((a))'i str: ABC result_expr: $&-$1-$2 expected_results A-A-A
+63_y: OK regex: '(a)b(c)'i parsed_regex: '(a)b(c)'i str: ABC result_expr: $&-$1-$2 expected_results ABC-A-C
+64_y: OK regex: 'a+b+c'i parsed_regex: 'a+b+c'i str: AABBABC result_expr: $& expected_results ABC
+65_y: OK regex: 'a{1,}b{1,}c'i parsed_regex: 'a{1,}b{1,}c'i str: AABBABC result_expr: $& expected_results ABC
+66_y: OK regex: 'a.+?c'i parsed_regex: 'a.+?c'i str: ABCABC result_expr: $& expected_results ABC
+67_y: OK regex: 'a.*?c'i parsed_regex: 'a.*?c'i str: ABCABC result_expr: $& expected_results ABC
+68_y: OK regex: 'a.{0,5}?c'i parsed_regex: 'a.{0,5}?c'i str: ABCABC result_expr: $& expected_results ABC
+69_y: OK regex: '(a+|b)*'i parsed_regex: '(a+|b)*'i str: AB result_expr: $&-$1 expected_results AB-B
+70_y: OK regex: '(a+|b){0,}'i parsed_regex: '(a+|b){0,}'i str: AB result_expr: $&-$1 expected_results AB-B
+71_y: OK regex: '(a+|b)+'i parsed_regex: '(a+|b)+'i str: AB result_expr: $&-$1 expected_results AB-B
+72_y: OK regex: '(a+|b){1,}'i parsed_regex: '(a+|b){1,}'i str: AB result_expr: $&-$1 expected_results AB-B
+73_y: OK regex: '(a+|b)?'i parsed_regex: '(a+|b)?'i str: AB result_expr: $&-$1 expected_results A-A
+74_y: OK regex: '(a+|b){0,1}'i parsed_regex: '(a+|b){0,1}'i str: AB result_expr: $&-$1 expected_results A-A
+75_y: OK regex: '(a+|b){0,1}?'i parsed_regex: '(a+|b){0,1}?'i str: AB result_expr: $&-$1 expected_results -
+76_y: OK regex: '[^ab]*'i parsed_regex: '[^ab]*'i str: CDE result_expr: $& expected_results CDE
+77_n: OK regex: 'abc'i parsed_regex: 'abc'i str:  result_expr: - expected_results -
+78_y: OK regex: 'a*'i parsed_regex: 'a*'i str:  result_expr: $& expected_results 
+79_y: OK regex: '([abc])*d'i parsed_regex: '([abc])*d'i str: ABBBCD result_expr: $&-$1 expected_results ABBBCD-C
+80_y: OK regex: '([abc])*bcd'i parsed_regex: '([abc])*bcd'i str: ABCD result_expr: $&-$1 expected_results ABCD-A
+81_y: OK regex: 'a|b|c|d|e'i parsed_regex: 'a|b|c|d|e'i str: E result_expr: $& expected_results E
+82_y: OK regex: '(a|b|c|d|e)f'i parsed_regex: '(a|b|c|d|e)f'i str: EF result_expr: $&-$1 expected_results EF-E
+83_y: OK regex: 'abcd*efg'i parsed_regex: 'abcd*efg'i str: ABCDEFG result_expr: $& expected_results ABCDEFG
+84_y: OK regex: 'ab*'i parsed_regex: 'ab*'i str: XABYABBBZ result_expr: $& expected_results AB
+85_y: OK regex: 'ab*'i parsed_regex: 'ab*'i str: XAYABBBZ result_expr: $& expected_results A
+86_y: OK regex: '(ab|cd)e'i parsed_regex: '(ab|cd)e'i str: ABCDE result_expr: $&-$1 expected_results CDE-CD
+87_y: OK regex: '[abhgefdc]ij'i parsed_regex: '[abhgefdc]ij'i str: HIJ result_expr: $& expected_results HIJ
+88_n: OK regex: '^(ab|cd)e'i parsed_regex: '^(ab|cd)e'i str: ABCDE result_expr: x$1y expected_results XY
+89_y: OK regex: '(abc|)ef'i parsed_regex: '(abc|)ef'i str: ABCDEF result_expr: $&-$1 expected_results EF-
+90_y: OK regex: '(a|b)c*d'i parsed_regex: '(a|b)c*d'i str: ABCD result_expr: $&-$1 expected_results BCD-B
+91_y: OK regex: '(ab|ab*)bc'i parsed_regex: '(ab|ab*)bc'i str: ABC result_expr: $&-$1 expected_results ABC-A
+92_y: OK regex: 'a([bc]*)c*'i parsed_regex: 'a([bc]*)c*'i str: ABC result_expr: $&-$1 expected_results ABC-BC
+93_y: OK regex: 'a([bc]*)(c*d)'i parsed_regex: 'a([bc]*)(c*d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-BC-D
+94_y: OK regex: 'a([bc]+)(c*d)'i parsed_regex: 'a([bc]+)(c*d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-BC-D
+95_y: OK regex: 'a([bc]*)(c+d)'i parsed_regex: 'a([bc]*)(c+d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-B-CD
+96_y: OK regex: 'a[bcd]*dcdcde'i parsed_regex: 'a[bcd]*dcdcde'i str: ADCDCDE result_expr: $& expected_results ADCDCDE
+97_n: OK regex: 'a[bcd]+dcdcde'i parsed_regex: 'a[bcd]+dcdcde'i str: ADCDCDE result_expr: - expected_results -
+98_y: OK regex: '(ab|a)b*c'i parsed_regex: '(ab|a)b*c'i str: ABC result_expr: $&-$1 expected_results ABC-AB
+99_y: OK regex: '((a)(b)c)(d)'i parsed_regex: '((a)(b)c)(d)'i str: ABCD result_expr: $1-$2-$3-$4 expected_results ABC-A-B-D
+100_y: OK regex: '[a-zA-Z_][a-zA-Z0-9_]*'i parsed_regex: '[a-zA-Z_][a-zA-Z0-9_]*'i str: ALPHA result_expr: $& expected_results ALPHA
+101_y: OK regex: '^a(bc+|b[eh])g|.h$'i parsed_regex: '^a(bc+|b[eh])g|.h$'i str: ABH result_expr: $&-$1 expected_results BH-
+102_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: EFFGZ result_expr: $&-$1-$2 expected_results EFFGZ-EFFGZ-
+103_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: IJ result_expr: $&-$1-$2 expected_results IJ-IJ-J
+104_n: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: EFFG result_expr: - expected_results -
+105_n: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: BCDD result_expr: - expected_results -
+106_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: REFFGZ result_expr: $&-$1-$2 expected_results EFFGZ-EFFGZ-
+107_y: OK regex: '((((((((((a))))))))))'i parsed_regex: '((((((((((a))))))))))'i str: A result_expr: $10 expected_results A
+108_y: OK regex: '((((((((((a))))))))))\10'i parsed_regex: '((((((((((a))))))))))\10'i str: AA result_expr: $& expected_results AA
+109_y: OK regex: '(((((((((a)))))))))'i parsed_regex: '(((((((((a)))))))))'i str: A result_expr: $& expected_results A
+110_n: OK regex: 'multiple words of text'i parsed_regex: 'multiple words of text'i str: UH-UH result_expr: - expected_results -
+111_y: OK regex: 'multiple words'i parsed_regex: 'multiple words'i str: MULTIPLE WORDS, YEAH result_expr: $& expected_results MULTIPLE WORDS
+112_y: OK regex: '(.*)c(.*)'i parsed_regex: '(.*)c(.*)'i str: ABCDE result_expr: $&-$1-$2 expected_results ABCDE-AB-DE
+113_y: OK regex: '\((.*), (.*)\)'i parsed_regex: '\((.*), (.*)\)'i str: (A, B) result_expr: ($2, $1) expected_results (B, A)
+114_n: OK regex: '[k]'i parsed_regex: '[k]'i str: AB result_expr: - expected_results -
+115_y: OK regex: 'abcd'i parsed_regex: 'abcd'i str: ABCD result_expr: $& expected_results ABCD
+116_y: OK regex: 'a(bc)d'i parsed_regex: 'a(bc)d'i str: ABCD result_expr: $1 expected_results BC
+117_y: OK regex: 'a[-]?c'i parsed_regex: 'a[-]?c'i str: AC result_expr: $& expected_results AC
+118_y: OK regex: '(abc)\1'i parsed_regex: '(abc)\1'i str: ABCABC result_expr: $1 expected_results ABC
+119_y: OK regex: '([a-c]*)\1'i parsed_regex: '([a-c]*)\1'i str: ABCABC result_expr: $1 expected_results ABC
+
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_12_case_insensitive.cpp.output b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_12_case_insensitive.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_13_posessive_modifier.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_13_posessive_modifier.cpp.execution
new file mode 100644
index 000000000..916d1a084
--- /dev/null
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_13_posessive_modifier.cpp.execution
@@ -0,0 +1,50 @@
+Running tests_13_posessive_modifier:
+01_n: OK regex: a++a parsed_regex: a++a str: aaaaa result_expr: - expected_results -
+02_n: OK regex: a*+a parsed_regex: a*+a str: aaaaa result_expr: - expected_results -
+03_n: OK regex: a{1,5}+a parsed_regex: a{1,5}+a str: aaaaa result_expr: - expected_results -
+04_n: OK regex: a?+a parsed_regex: a?+a str: ab result_expr: - expected_results -
+05_y: OK regex: a++b parsed_regex: a++b str: aaaaab result_expr: $& expected_results aaaaab
+06_y: OK regex: a*+b parsed_regex: a*+b str: aaaaab result_expr: $& expected_results aaaaab
+07_y: OK regex: a{1,5}+b parsed_regex: a{1,5}+b str: aaaaab result_expr: $& expected_results aaaaab
+08_y: OK regex: a?+b parsed_regex: a?+b str: ab result_expr: $& expected_results ab
+09_n: OK regex: fooa++a parsed_regex: fooa++a str: fooaaaaa result_expr: - expected_results -
+10_n: OK regex: fooa*+a parsed_regex: fooa*+a str: fooaaaaa result_expr: - expected_results -
+11_n: OK regex: fooa{1,5}+a parsed_regex: fooa{1,5}+a str: fooaaaaa result_expr: - expected_results -
+12_n: OK regex: fooa?+a parsed_regex: fooa?+a str: fooab result_expr: - expected_results -
+13_y: OK regex: fooa++b parsed_regex: fooa++b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+14_y: OK regex: fooa*+b parsed_regex: fooa*+b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+15_y: OK regex: fooa{1,5}+b parsed_regex: fooa{1,5}+b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+16_y: OK regex: fooa?+b parsed_regex: fooa?+b str: fooab result_expr: $& expected_results fooab
+17_n: OK regex: (aA)++(aA) parsed_regex: (aA)++(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+18_n: OK regex: (aA|bB)++(aA|bB) parsed_regex: (aA|bB)++(aA|bB) str: aAaAbBaAbB result_expr: - expected_results aAaAbBaAbB
+19_n: OK regex: (aA)*+(aA) parsed_regex: (aA)*+(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+20_n: OK regex: (aA|bB)*+(aA|bB) parsed_regex: (aA|bB)*+(aA|bB) str: aAaAbBaAaA result_expr: - expected_results aAaAbBaAaA
+21_n: OK regex: (aA){1,5}+(aA) parsed_regex: (aA){1,5}+(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+22_n: OK regex: (aA|bB){1,5}+(aA|bB) parsed_regex: (aA|bB){1,5}+(aA|bB) str: aAaAbBaAaA result_expr: - expected_results aAaAbBaAaA
+23_n: OK regex: (aA)?+(aA) parsed_regex: (aA)?+(aA) str: aAb result_expr: - expected_results aAb
+24_n: OK regex: (aA|bB)?+(aA|bB) parsed_regex: (aA|bB)?+(aA|bB) str: bBb result_expr: - expected_results bBb
+25_y: OK regex: (aA)++b parsed_regex: (aA)++b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+26_y: OK regex: (aA|bB)++b parsed_regex: (aA|bB)++b str: aAbBaAaAbBb result_expr: $& expected_results aAbBaAaAbBb
+27_y: OK regex: (aA)*+b parsed_regex: (aA)*+b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+28_y: OK regex: (aA|bB)*+b parsed_regex: (aA|bB)*+b str: bBbBbBbBbBb result_expr: $& expected_results bBbBbBbBbBb
+29_y: OK regex: (aA){1,5}+b parsed_regex: (aA){1,5}+b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+30_y: OK regex: (aA|bB){1,5}+b parsed_regex: (aA|bB){1,5}+b str: bBaAbBaAbBb result_expr: $& expected_results bBaAbBaAbBb
+31_y: OK regex: (aA)?+b parsed_regex: (aA)?+b str: aAb result_expr: $& expected_results aAb
+32_y: OK regex: (aA|bB)?+b parsed_regex: (aA|bB)?+b str: bBb result_expr: $& expected_results bBb
+33_n: OK regex: foo(aA)++(aA) parsed_regex: foo(aA)++(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+34_n: OK regex: foo(aA|bB)++(aA|bB) parsed_regex: foo(aA|bB)++(aA|bB) str: foobBbBbBaAaA result_expr: - expected_results foobBbBbBaAaA
+35_n: OK regex: foo(aA)*+(aA) parsed_regex: foo(aA)*+(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+36_n: OK regex: foo(aA|bB)*+(aA|bB) parsed_regex: foo(aA|bB)*+(aA|bB) str: foobBaAbBaAaA result_expr: - expected_results foobBaAbBaAaA
+37_n: OK regex: foo(aA){1,5}+(aA) parsed_regex: foo(aA){1,5}+(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+38_n: OK regex: foo(aA|bB){1,5}+(aA|bB) parsed_regex: foo(aA|bB){1,5}+(aA|bB) str: fooaAbBbBaAaA result_expr: - expected_results fooaAbBbBaAaA
+39_n: OK regex: foo(aA)?+(aA) parsed_regex: foo(aA)?+(aA) str: fooaAb result_expr: - expected_results fooaAb
+40_n: OK regex: foo(aA|bB)?+(aA|bB) parsed_regex: foo(aA|bB)?+(aA|bB) str: foobBb result_expr: - expected_results foobBb
+41_y: OK regex: foo(aA)++b parsed_regex: foo(aA)++b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+42_y: OK regex: foo(aA|bB)++b parsed_regex: foo(aA|bB)++b str: foobBaAbBaAbBb result_expr: $& expected_results foobBaAbBaAbBb
+43_y: OK regex: foo(aA)*+b parsed_regex: foo(aA)*+b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+44_y: OK regex: foo(aA|bB)*+b parsed_regex: foo(aA|bB)*+b str: foobBbBaAaAaAb result_expr: $& expected_results foobBbBaAaAaAb
+45_y: OK regex: foo(aA){1,5}+b parsed_regex: foo(aA){1,5}+b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+46_y: OK regex: foo(aA|bB){1,5}+b parsed_regex: foo(aA|bB){1,5}+b str: foobBaAaAaAaAb result_expr: $& expected_results foobBaAaAaAaAb
+47_y: OK regex: foo(aA)?+b parsed_regex: foo(aA)?+b str: fooaAb result_expr: $& expected_results fooaAb
+48_y: OK regex: foo(aA|bB)?+b parsed_regex: foo(aA|bB)?+b str: foobBb result_expr: $& expected_results foobBb
+
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_13_posessive_modifier.cpp.output b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_13_posessive_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_14_multiline_modifier.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_14_multiline_modifier.cpp.execution
new file mode 100644
index 000000000..9a12081ac
--- /dev/null
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_14_multiline_modifier.cpp.execution
@@ -0,0 +1,533 @@
+Running tests_14_multiline_modifier:
+01_y: OK regex: \Z parsed_regex: \Z str: a
+b
+ result_expr: $-[0] expected_results 3
+02_y: OK regex: \z parsed_regex: \z str: a
+b
+ result_expr: $-[0] expected_results 4
+03_y: OK regex: $ parsed_regex: $ str: a
+b
+ result_expr: $-[0] expected_results 3
+04_y: OK regex: \Z parsed_regex: \Z str: b
+a
+ result_expr: $-[0] expected_results 3
+05_y: OK regex: \z parsed_regex: \z str: b
+a
+ result_expr: $-[0] expected_results 4
+06_y: OK regex: $ parsed_regex: $ str: b
+a
+ result_expr: $-[0] expected_results 3
+07_y: OK regex: \Z parsed_regex: \Z str: b
+a result_expr: $-[0] expected_results 3
+08_y: OK regex: \z parsed_regex: \z str: b
+a result_expr: $-[0] expected_results 3
+09_y: OK regex: $ parsed_regex: $ str: b
+a result_expr: $-[0] expected_results 3
+10_y: OK regex: '\Z'm parsed_regex: '\Z'm str: a
+b
+ result_expr: $-[0] expected_results 3
+11_y: OK regex: '\z'm parsed_regex: '\z'm str: a
+b
+ result_expr: $-[0] expected_results 4
+12_y: OK regex: '$'m parsed_regex: '$'m str: a
+b
+ result_expr: $-[0] expected_results 1
+13_y: OK regex: '\Z'm parsed_regex: '\Z'm str: b
+a
+ result_expr: $-[0] expected_results 3
+14_y: OK regex: '\z'm parsed_regex: '\z'm str: b
+a
+ result_expr: $-[0] expected_results 4
+15_y: OK regex: '$'m parsed_regex: '$'m str: b
+a
+ result_expr: $-[0] expected_results 1
+16_y: OK regex: '\Z'm parsed_regex: '\Z'm str: b
+a result_expr: $-[0] expected_results 3
+17_y: OK regex: '\z'm parsed_regex: '\z'm str: b
+a result_expr: $-[0] expected_results 3
+18_y: OK regex: '$'m parsed_regex: '$'m str: b
+a result_expr: $-[0] expected_results 1
+19_n: OK regex: a\Z parsed_regex: a\Z str: a
+b
+ result_expr: - expected_results -
+20_n: OK regex: a\z parsed_regex: a\z str: a
+b
+ result_expr: - expected_results -
+21_n: OK regex: a$ parsed_regex: a$ str: a
+b
+ result_expr: - expected_results -
+22_y: OK regex: a\Z parsed_regex: a\Z str: b
+a
+ result_expr: $-[0] expected_results 2
+23_n: OK regex: a\z parsed_regex: a\z str: b
+a
+ result_expr: - expected_results -
+24_y: OK regex: a$ parsed_regex: a$ str: b
+a
+ result_expr: $-[0] expected_results 2
+25_y: OK regex: a\Z parsed_regex: a\Z str: b
+a result_expr: $-[0] expected_results 2
+26_y: OK regex: a\z parsed_regex: a\z str: b
+a result_expr: $-[0] expected_results 2
+27_y: OK regex: a$ parsed_regex: a$ str: b
+a result_expr: $-[0] expected_results 2
+28_n: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: a
+b
+ result_expr: - expected_results -
+29_n: OK regex: 'a\z'm parsed_regex: 'a\z'm str: a
+b
+ result_expr: - expected_results -
+30_y: OK regex: 'a$'m parsed_regex: 'a$'m str: a
+b
+ result_expr: $-[0] expected_results 0
+31_y: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: b
+a
+ result_expr: $-[0] expected_results 2
+32_n: OK regex: 'a\z'm parsed_regex: 'a\z'm str: b
+a
+ result_expr: - expected_results -
+33_y: OK regex: 'a$'m parsed_regex: 'a$'m str: b
+a
+ result_expr: $-[0] expected_results 2
+34_y: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: b
+a result_expr: $-[0] expected_results 2
+35_y: OK regex: 'a\z'm parsed_regex: 'a\z'm str: b
+a result_expr: $-[0] expected_results 2
+36_y: OK regex: 'a$'m parsed_regex: 'a$'m str: b
+a result_expr: $-[0] expected_results 2
+37_n: OK regex: aa\Z parsed_regex: aa\Z str: aa
+b
+ result_expr: - expected_results -
+38_n: OK regex: aa\z parsed_regex: aa\z str: aa
+b
+ result_expr: - expected_results -
+39_n: OK regex: aa$ parsed_regex: aa$ str: aa
+b
+ result_expr: - expected_results -
+40_y: OK regex: aa\Z parsed_regex: aa\Z str: b
+aa
+ result_expr: $-[0] expected_results 2
+41_n: OK regex: aa\z parsed_regex: aa\z str: b
+aa
+ result_expr: - expected_results -
+42_y: OK regex: aa$ parsed_regex: aa$ str: b
+aa
+ result_expr: $-[0] expected_results 2
+43_y: OK regex: aa\Z parsed_regex: aa\Z str: b
+aa result_expr: $-[0] expected_results 2
+44_y: OK regex: aa\z parsed_regex: aa\z str: b
+aa result_expr: $-[0] expected_results 2
+45_y: OK regex: aa$ parsed_regex: aa$ str: b
+aa result_expr: $-[0] expected_results 2
+46_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: aa
+b
+ result_expr: - expected_results -
+47_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: aa
+b
+ result_expr: - expected_results -
+48_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: aa
+b
+ result_expr: $-[0] expected_results 0
+49_y: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+aa
+ result_expr: $-[0] expected_results 2
+50_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+aa
+ result_expr: - expected_results -
+51_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+aa
+ result_expr: $-[0] expected_results 2
+52_y: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+aa result_expr: $-[0] expected_results 2
+53_y: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+aa result_expr: $-[0] expected_results 2
+54_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+aa result_expr: $-[0] expected_results 2
+55_n: OK regex: aa\Z parsed_regex: aa\Z str: ac
+b
+ result_expr: - expected_results -
+56_n: OK regex: aa\z parsed_regex: aa\z str: ac
+b
+ result_expr: - expected_results -
+57_n: OK regex: aa$ parsed_regex: aa$ str: ac
+b
+ result_expr: - expected_results -
+58_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ac
+ result_expr: - expected_results -
+59_n: OK regex: aa\z parsed_regex: aa\z str: b
+ac
+ result_expr: - expected_results -
+60_n: OK regex: aa$ parsed_regex: aa$ str: b
+ac
+ result_expr: - expected_results -
+61_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ac result_expr: - expected_results -
+62_n: OK regex: aa\z parsed_regex: aa\z str: b
+ac result_expr: - expected_results -
+63_n: OK regex: aa$ parsed_regex: aa$ str: b
+ac result_expr: - expected_results -
+64_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: ac
+b
+ result_expr: - expected_results -
+65_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: ac
+b
+ result_expr: - expected_results -
+66_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: ac
+b
+ result_expr: - expected_results -
+67_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ac
+ result_expr: - expected_results -
+68_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ac
+ result_expr: - expected_results -
+69_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ac
+ result_expr: - expected_results -
+70_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ac result_expr: - expected_results -
+71_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ac result_expr: - expected_results -
+72_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ac result_expr: - expected_results -
+73_n: OK regex: aa\Z parsed_regex: aa\Z str: ca
+b
+ result_expr: - expected_results -
+74_n: OK regex: aa\z parsed_regex: aa\z str: ca
+b
+ result_expr: - expected_results -
+75_n: OK regex: aa$ parsed_regex: aa$ str: ca
+b
+ result_expr: - expected_results -
+76_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ca
+ result_expr: - expected_results -
+77_n: OK regex: aa\z parsed_regex: aa\z str: b
+ca
+ result_expr: - expected_results -
+78_n: OK regex: aa$ parsed_regex: aa$ str: b
+ca
+ result_expr: - expected_results -
+79_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ca result_expr: - expected_results -
+80_n: OK regex: aa\z parsed_regex: aa\z str: b
+ca result_expr: - expected_results -
+81_n: OK regex: aa$ parsed_regex: aa$ str: b
+ca result_expr: - expected_results -
+82_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: ca
+b
+ result_expr: - expected_results -
+83_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: ca
+b
+ result_expr: - expected_results -
+84_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: ca
+b
+ result_expr: - expected_results -
+85_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ca
+ result_expr: - expected_results -
+86_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ca
+ result_expr: - expected_results -
+87_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ca
+ result_expr: - expected_results -
+88_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ca result_expr: - expected_results -
+89_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ca result_expr: - expected_results -
+90_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ca result_expr: - expected_results -
+91_n: OK regex: ab\Z parsed_regex: ab\Z str: ab
+b
+ result_expr: - expected_results -
+92_n: OK regex: ab\z parsed_regex: ab\z str: ab
+b
+ result_expr: - expected_results -
+93_n: OK regex: ab$ parsed_regex: ab$ str: ab
+b
+ result_expr: - expected_results -
+94_y: OK regex: ab\Z parsed_regex: ab\Z str: b
+ab
+ result_expr: $-[0] expected_results 2
+95_n: OK regex: ab\z parsed_regex: ab\z str: b
+ab
+ result_expr: - expected_results -
+96_y: OK regex: ab$ parsed_regex: ab$ str: b
+ab
+ result_expr: $-[0] expected_results 2
+97_y: OK regex: ab\Z parsed_regex: ab\Z str: b
+ab result_expr: $-[0] expected_results 2
+98_y: OK regex: ab\z parsed_regex: ab\z str: b
+ab result_expr: $-[0] expected_results 2
+99_y: OK regex: ab$ parsed_regex: ab$ str: b
+ab result_expr: $-[0] expected_results 2
+100_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ab
+b
+ result_expr: - expected_results -
+101_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ab
+b
+ result_expr: - expected_results -
+102_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ab
+b
+ result_expr: $-[0] expected_results 0
+103_y: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ab
+ result_expr: $-[0] expected_results 2
+104_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ab
+ result_expr: - expected_results -
+105_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ab
+ result_expr: $-[0] expected_results 2
+106_y: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ab result_expr: $-[0] expected_results 2
+107_y: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ab result_expr: $-[0] expected_results 2
+108_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ab result_expr: $-[0] expected_results 2
+109_n: OK regex: ab\Z parsed_regex: ab\Z str: ac
+b
+ result_expr: - expected_results -
+110_n: OK regex: ab\z parsed_regex: ab\z str: ac
+b
+ result_expr: - expected_results -
+111_n: OK regex: ab$ parsed_regex: ab$ str: ac
+b
+ result_expr: - expected_results -
+112_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ac
+ result_expr: - expected_results -
+113_n: OK regex: ab\z parsed_regex: ab\z str: b
+ac
+ result_expr: - expected_results -
+114_n: OK regex: ab$ parsed_regex: ab$ str: b
+ac
+ result_expr: - expected_results -
+115_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ac result_expr: - expected_results -
+116_n: OK regex: ab\z parsed_regex: ab\z str: b
+ac result_expr: - expected_results -
+117_n: OK regex: ab$ parsed_regex: ab$ str: b
+ac result_expr: - expected_results -
+118_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ac
+b
+ result_expr: - expected_results -
+119_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ac
+b
+ result_expr: - expected_results -
+120_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ac
+b
+ result_expr: - expected_results -
+121_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ac
+ result_expr: - expected_results -
+122_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ac
+ result_expr: - expected_results -
+123_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ac
+ result_expr: - expected_results -
+124_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ac result_expr: - expected_results -
+125_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ac result_expr: - expected_results -
+126_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ac result_expr: - expected_results -
+127_n: OK regex: ab\Z parsed_regex: ab\Z str: ca
+b
+ result_expr: - expected_results -
+128_n: OK regex: ab\z parsed_regex: ab\z str: ca
+b
+ result_expr: - expected_results -
+129_n: OK regex: ab$ parsed_regex: ab$ str: ca
+b
+ result_expr: - expected_results -
+130_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ca
+ result_expr: - expected_results -
+131_n: OK regex: ab\z parsed_regex: ab\z str: b
+ca
+ result_expr: - expected_results -
+132_n: OK regex: ab$ parsed_regex: ab$ str: b
+ca
+ result_expr: - expected_results -
+133_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ca result_expr: - expected_results -
+134_n: OK regex: ab\z parsed_regex: ab\z str: b
+ca result_expr: - expected_results -
+135_n: OK regex: ab$ parsed_regex: ab$ str: b
+ca result_expr: - expected_results -
+136_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ca
+b
+ result_expr: - expected_results -
+137_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ca
+b
+ result_expr: - expected_results -
+138_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ca
+b
+ result_expr: - expected_results -
+139_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ca
+ result_expr: - expected_results -
+140_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ca
+ result_expr: - expected_results -
+141_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ca
+ result_expr: - expected_results -
+142_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ca result_expr: - expected_results -
+143_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ca result_expr: - expected_results -
+144_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ca result_expr: - expected_results -
+145_n: OK regex: abb\Z parsed_regex: abb\Z str: abb
+b
+ result_expr: - expected_results -
+146_n: OK regex: abb\z parsed_regex: abb\z str: abb
+b
+ result_expr: - expected_results -
+147_n: OK regex: abb$ parsed_regex: abb$ str: abb
+b
+ result_expr: - expected_results -
+148_y: OK regex: abb\Z parsed_regex: abb\Z str: b
+abb
+ result_expr: $-[0] expected_results 2
+149_n: OK regex: abb\z parsed_regex: abb\z str: b
+abb
+ result_expr: - expected_results -
+150_y: OK regex: abb$ parsed_regex: abb$ str: b
+abb
+ result_expr: $-[0] expected_results 2
+151_y: OK regex: abb\Z parsed_regex: abb\Z str: b
+abb result_expr: $-[0] expected_results 2
+152_y: OK regex: abb\z parsed_regex: abb\z str: b
+abb result_expr: $-[0] expected_results 2
+153_y: OK regex: abb$ parsed_regex: abb$ str: b
+abb result_expr: $-[0] expected_results 2
+154_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: abb
+b
+ result_expr: - expected_results -
+155_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: abb
+b
+ result_expr: - expected_results -
+156_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: abb
+b
+ result_expr: $-[0] expected_results 0
+157_y: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+abb
+ result_expr: $-[0] expected_results 2
+158_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+abb
+ result_expr: - expected_results -
+159_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+abb
+ result_expr: $-[0] expected_results 2
+160_y: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+abb result_expr: $-[0] expected_results 2
+161_y: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+abb result_expr: $-[0] expected_results 2
+162_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+abb result_expr: $-[0] expected_results 2
+163_n: OK regex: abb\Z parsed_regex: abb\Z str: ac
+b
+ result_expr: - expected_results -
+164_n: OK regex: abb\z parsed_regex: abb\z str: ac
+b
+ result_expr: - expected_results -
+165_n: OK regex: abb$ parsed_regex: abb$ str: ac
+b
+ result_expr: - expected_results -
+166_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ac
+ result_expr: - expected_results -
+167_n: OK regex: abb\z parsed_regex: abb\z str: b
+ac
+ result_expr: - expected_results -
+168_n: OK regex: abb$ parsed_regex: abb$ str: b
+ac
+ result_expr: - expected_results -
+169_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ac result_expr: - expected_results -
+170_n: OK regex: abb\z parsed_regex: abb\z str: b
+ac result_expr: - expected_results -
+171_n: OK regex: abb$ parsed_regex: abb$ str: b
+ac result_expr: - expected_results -
+172_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: ac
+b
+ result_expr: - expected_results -
+173_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: ac
+b
+ result_expr: - expected_results -
+174_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: ac
+b
+ result_expr: - expected_results -
+175_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ac
+ result_expr: - expected_results -
+176_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ac
+ result_expr: - expected_results -
+177_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ac
+ result_expr: - expected_results -
+178_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ac result_expr: - expected_results -
+179_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ac result_expr: - expected_results -
+180_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ac result_expr: - expected_results -
+181_n: OK regex: abb\Z parsed_regex: abb\Z str: ca
+b
+ result_expr: - expected_results -
+182_n: OK regex: abb\z parsed_regex: abb\z str: ca
+b
+ result_expr: - expected_results -
+183_n: OK regex: abb$ parsed_regex: abb$ str: ca
+b
+ result_expr: - expected_results -
+184_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ca
+ result_expr: - expected_results -
+185_n: OK regex: abb\z parsed_regex: abb\z str: b
+ca
+ result_expr: - expected_results -
+186_n: OK regex: abb$ parsed_regex: abb$ str: b
+ca
+ result_expr: - expected_results -
+187_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ca result_expr: - expected_results -
+188_n: OK regex: abb\z parsed_regex: abb\z str: b
+ca result_expr: - expected_results -
+189_n: OK regex: abb$ parsed_regex: abb$ str: b
+ca result_expr: - expected_results -
+190_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: ca
+b
+ result_expr: - expected_results -
+191_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: ca
+b
+ result_expr: - expected_results -
+192_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: ca
+b
+ result_expr: - expected_results -
+193_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ca
+ result_expr: - expected_results -
+194_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ca
+ result_expr: - expected_results -
+195_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ca
+ result_expr: - expected_results -
+196_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ca result_expr: - expected_results -
+197_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ca result_expr: - expected_results -
+198_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ca result_expr: - expected_results -
+199_y: OK regex: '\Aa$'m parsed_regex: '\Aa$'m str: a
+
+ result_expr: $& expected_results a
+
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_14_multiline_modifier.cpp.output b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_14_multiline_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_15_group_modifiers.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_15_group_modifiers.cpp.execution
new file mode 100644
index 000000000..de92abc48
--- /dev/null
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_15_group_modifiers.cpp.execution
@@ -0,0 +1,87 @@
+Running tests_15_group_modifiers:
+01_y: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: ab result_expr: $& expected_results ab
+02_y: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: ab result_expr: $&:$1 expected_results ab:a
+03_y: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: Ab result_expr: $& expected_results Ab
+04_y: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: Ab result_expr: $&:$1 expected_results Ab:A
+05_n: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: aB result_expr: - expected_results -
+06_n: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: aB result_expr: - expected_results -
+07_y: OK regex: (?i:a)b parsed_regex: (?i:a)b str: ab result_expr: $& expected_results ab
+08_y: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: ab result_expr: $&:$1 expected_results ab:a
+09_y: OK regex: (?i:a)b parsed_regex: (?i:a)b str: Ab result_expr: $& expected_results Ab
+10_y: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: Ab result_expr: $&:$1 expected_results Ab:A
+11_n: OK regex: (?i:a)b parsed_regex: (?i:a)b str: aB result_expr: - expected_results -
+12_n: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: aB result_expr: - expected_results -
+13_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: ab result_expr: $& expected_results ab
+14_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: ab result_expr: $&:$1 expected_results ab:a
+15_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: aB result_expr: $& expected_results aB
+16_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: aB result_expr: $&:$1 expected_results aB:a
+17_n: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: Ab result_expr: - expected_results -
+18_n: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: Ab result_expr: - expected_results -
+19_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: aB result_expr: $& expected_results aB
+20_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: aB result_expr: $1 expected_results a
+21_n: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: AB result_expr: - expected_results -
+22_n: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: AB result_expr: - expected_results -
+23_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: ab result_expr: $& expected_results ab
+24_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: ab result_expr: $&:$1 expected_results ab:a
+25_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: aB result_expr: $& expected_results aB
+26_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: aB result_expr: $&:$1 expected_results aB:a
+27_n: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: Ab result_expr: - expected_results -
+28_n: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: Ab result_expr: - expected_results -
+29_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: aB result_expr: $& expected_results aB
+30_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: aB result_expr: $1 expected_results a
+31_n: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: AB result_expr: - expected_results -
+32_n: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: AB result_expr: - expected_results -
+33_n: OK regex: '((?-i:a.))b'i parsed_regex: '((?-i:a.))b'i str: a
+B result_expr: - expected_results -
+34_n: OK regex: '((?-i:a\N))b'i parsed_regex: '((?-i:a\N))b'i str: a
+B result_expr: - expected_results -
+35_y: OK regex: '((?s-i:a.))b'i parsed_regex: '((?s-i:a.))b'i str: a
+B result_expr: $1 expected_results a
+
+36_n: OK regex: '((?s-i:a\N))b'i parsed_regex: '((?s-i:a\N))b'i str: a
+B result_expr: - expected_results -
+37_n: OK regex: '((?s-i:a.))b'i parsed_regex: '((?s-i:a.))b'i str: B
+B result_expr: - expected_results -
+38_n: OK regex: '((?s-i:a\N))b'i parsed_regex: '((?s-i:a\N))b'i str: B
+B result_expr: - expected_results -
+39_y: OK regex: (?i:.[b].) parsed_regex: (?i:.[b].) str: abd result_expr: $& expected_results abd
+40_y: OK regex: (?i:\N[b]\N) parsed_regex: (?i:\N[b]\N) str: abd result_expr: $& expected_results abd
+41_n: OK regex: ^(?:a?b?)*$ parsed_regex: ^(?:a?b?)*$ str: a-- result_expr: - expected_results -
+42_y: OK regex: ((?s)^a(.))((?m)^b$) parsed_regex: ((?s)^a(.))((?m)^b$) str: a
+b
+c
+ result_expr: $1;$2;$3 expected_results a
+;
+;b
+43_y: OK regex: ((?m)^b$) parsed_regex: ((?m)^b$) str: a
+b
+c
+ result_expr: $1 expected_results b
+44_y: OK regex: (?m)^b parsed_regex: (?m)^b str: a
+b
+ result_expr: $& expected_results b
+45_y: OK regex: (?m)^(b) parsed_regex: (?m)^(b) str: a
+b
+ result_expr: $1 expected_results b
+46_y: OK regex: ((?m)^b) parsed_regex: ((?m)^b) str: a
+b
+ result_expr: $1 expected_results b
+47_y: OK regex: \n((?m)^b) parsed_regex: \n((?m)^b) str: a
+b
+ result_expr: $1 expected_results b
+48_n: OK regex: ^b parsed_regex: ^b str: a
+b
+c
+ result_expr: - expected_results -
+49_n: OK regex: ()^b parsed_regex: ()^b str: a
+b
+c
+ result_expr: - expected_results -
+50_y: OK regex: ((?m)^b) parsed_regex: ((?m)^b) str: a
+b
+c
+ result_expr: $1 expected_results b
+51_y: OK Warning: Parsed regex does not match. regex: '(foo)'n parsed_regex: '(?:foo)'n str: foobar result_expr: $&-$1 expected_results foo-
+52_y: OK Warning: Parsed regex does not match. regex: '(?-n)(foo)(?n)(bar)'n parsed_regex: '(?-n)(foo)(?n)(?:bar)'n str: foobar result_expr: $&-$1-$2 expected_results foobar-foo-
+53_y: OK Warning: Parsed regex does not match. regex: '(?-n:(foo)(?n:(bar)))'n parsed_regex: '(?-n:(foo)(?n:(?:bar)))'n str: foobar result_expr: $&-$1-$2 expected_results foobar-foo-
+
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_15_group_modifiers.cpp.output b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_15_group_modifiers.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_16_perl_syntax_modifier.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_16_perl_syntax_modifier.cpp.execution
new file mode 100644
index 000000000..761720007
--- /dev/null
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_16_perl_syntax_modifier.cpp.execution
@@ -0,0 +1,35 @@
+Running tests_16_perl_syntax_modifier:
+01_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $& expected_results a
+02_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $-[0] expected_results 0
+03_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $+[0] expected_results 1
+04_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $& expected_results abbb
+05_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $-[0] expected_results 0
+06_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $+[0] expected_results 4
+07_y: OK Warning: Parsed regex does not match. regex: /a\N c/x parsed_regex: /a\Nc/x str: abc result_expr: $& expected_results abc
+08_y: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzc result_expr: $& expected_results axyzc
+09_n: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzd result_expr: - expected_results -
+10_yS: OK regex: /[a b]/x parsed_regex: /[a b]/x str:   result_expr: $& expected_results  
+11_n: OK regex: /[a b]/xx parsed_regex: /[a b]/xx str:   result_expr: - expected_results -
+12_y: OK regex: /[a\ b]/xx parsed_regex: /[a\ b]/xx str:   result_expr: $& expected_results  
+13_n: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: a result_expr: - expected_results -
+14_n: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: b result_expr: - expected_results -
+15_y: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: A result_expr: $& expected_results A
+16_yS: OK regex: /(?x:[a b])/xx parsed_regex: /(?x:[a b])/xx str:   result_expr: $& expected_results  
+17_n: OK regex: /(?xx:[a b])/x parsed_regex: /(?xx:[a b])/x str:   result_expr: - expected_results -
+18_yS: OK regex: /(?x)[a b]/xx parsed_regex: /(?x)[a b]/xx str:   result_expr: $& expected_results  
+19_n: OK regex: /(?xx)[a b]/x parsed_regex: /(?xx)[a b]/x str:   result_expr: - expected_results -
+20_yS: OK regex: /(?-x:[a b])/xx parsed_regex: /(?-x:[a b])/xx str:   result_expr: $& expected_results  
+21_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $& expected_results a
+22_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $-[0] expected_results 0
+23_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $+[0] expected_results 1
+24_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $& expected_results abbb
+25_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $-[0] expected_results 0
+26_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $+[0] expected_results 4
+27_y: OK Warning: Parsed regex does not match. regex: /a\N c/x parsed_regex: /a\Nc/x str: abc result_expr: $& expected_results abc
+28_y: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzc result_expr: $& expected_results axyzc
+29_n: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzd result_expr: - expected_results -
+30_y: OK regex: /[#]/ parsed_regex: /[#]/ str: a#b result_expr: $& expected_results #
+31_y: OK regex: /[#]b/ parsed_regex: /[#]b/ str: a#b result_expr: $& expected_results #b
+32_y: OK regex: /[#]/x parsed_regex: /[#]/x str: a#b result_expr: $& expected_results #
+33_y: OK regex: /[#]b/x parsed_regex: /[#]b/x str: a#b result_expr: $& expected_results #b
+
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_16_perl_syntax_modifier.cpp.output b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_16_perl_syntax_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_17_comments.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_17_comments.cpp.execution
new file mode 100644
index 000000000..17c9a5d55
--- /dev/null
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_17_comments.cpp.execution
@@ -0,0 +1,5 @@
+Running tests_17_comments:
+01_y: OK regex: ^a(?#xxx){3}c parsed_regex: ^a(?#xxx){3}c str: aaac result_expr: $& expected_results aaac
+02_y: OK Warning: Parsed regex does not match. regex: '^a (?#xxx) (?#yyy) {3}c'x parsed_regex: '^a(?#xxx)(?#yyy){3}c'x str: aaac result_expr: $& expected_results aaac
+03_y: OK Warning: Parsed regex does not match. regex: 'foo # Match foo'x parsed_regex: 'foo'x str: foobar result_expr: $& expected_results foo
+
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_17_comments.cpp.output b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_17_comments.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_18_branch_reset.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_18_branch_reset.cpp.execution
new file mode 100644
index 000000000..1d088ce31
--- /dev/null
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_18_branch_reset.cpp.execution
@@ -0,0 +1,17 @@
+Running tests_18_branch_reset:
+01_y: OK regex: (?|(a)) parsed_regex: (?|(a)) str: a result_expr: $1-$+ expected_results a-a
+02_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: d!o!da result_expr: $1-$2-$3 expected_results !o!-o-a
+03_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: aabc result_expr: $1-$2-$3 expected_results a--c
+04_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: ixyjp result_expr: $1-$2-$3 expected_results x-y-p
+05_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: a result_expr: $1 expected_results a
+06_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: b result_expr: $1 expected_results b
+07_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: c result_expr: $1 expected_results c
+08_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: d result_expr: $1 expected_results d
+09_y: OK regex: (.)(?|(.)(.)x|(.)d)(.) parsed_regex: (.)(?|(.)(.)x|(.)d)(.) str: abcde result_expr: $1-$2-$3-$4-$5- expected_results b-c--e--
+10_y: OK regex: (\N)(?|(\N)(\N)x|(\N)d)(\N) parsed_regex: (\N)(?|(\N)(\N)x|(\N)d)(\N) str: abcde result_expr: $1-$2-$3-$4-$5- expected_results b-c--e--
+11_yM: OK regex: (?|(?<foo>x)) parsed_regex: (?|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+12_yM: OK regex: (?|(?<foo>x)|(?<bar>y)) parsed_regex: (?|(?<foo>x)|(?<bar>y)) str: x result_expr: $+{foo} expected_results x
+13_yM: OK regex: (?|(?<bar>y)|(?<foo>x)) parsed_regex: (?|(?<bar>y)|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+14_yM: OK regex: (?<bar>)(?|(?<foo>x)) parsed_regex: (?<bar>)(?|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+15_y: OK regex: (?|(b)|()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(a)) parsed_regex: (?|(b)|()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(a)) str: a result_expr: $& expected_results a
+
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_18_branch_reset.cpp.output b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_18_branch_reset.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_19_lookahead.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_19_lookahead.cpp.execution
new file mode 100644
index 000000000..7b34914b1
--- /dev/null
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_19_lookahead.cpp.execution
@@ -0,0 +1,77 @@
+Running tests_19_lookahead:
+01_y: OK regex: a(?!b). parsed_regex: a(?!b). str: abad result_expr: $& expected_results ad
+02_y: OK regex: (?=)a parsed_regex: (?=)a str: a result_expr: $& expected_results a
+03_y: OK regex: a(?=d). parsed_regex: a(?=d). str: abad result_expr: $& expected_results ad
+04_y: OK regex: a(?=c|d). parsed_regex: a(?=c|d). str: abad result_expr: $& expected_results ad
+05_y: OK regex: ^(?:b|a(?=(.)))*\1 parsed_regex: ^(?:b|a(?=(.)))*\1 str: abc result_expr: $& expected_results ab
+06_y: OK regex: (?=(a+?))(\1ab) parsed_regex: (?=(a+?))(\1ab) str: aaab result_expr: $2 expected_results aab
+07_n: OK regex: ^(?=(a+?))\1ab parsed_regex: ^(?=(a+?))\1ab str: aaab result_expr: - expected_results -
+08_y: OK regex: (?=(a+?))(\1ab) parsed_regex: (?=(a+?))(\1ab) str: aaab result_expr: $2 expected_results aab
+09_n: OK regex: ^(?=(a+?))\1ab parsed_regex: ^(?=(a+?))\1ab str: aaab result_expr: - expected_results -
+10_y: OK regex: (.*)(?=c) parsed_regex: (.*)(?=c) str: abcd result_expr: $1 expected_results ab
+11_yB: OK regex: (.*)(?=c)c parsed_regex: (.*)(?=c)c str: abcd result_expr: $1 expected_results ab
+12_y: OK regex: (.*)(?=b|c) parsed_regex: (.*)(?=b|c) str: abcd result_expr: $1 expected_results ab
+13_y: OK regex: (.*)(?=b|c)c parsed_regex: (.*)(?=b|c)c str: abcd result_expr: $1 expected_results ab
+14_y: OK regex: (.*)(?=c|b) parsed_regex: (.*)(?=c|b) str: abcd result_expr: $1 expected_results ab
+15_y: OK regex: (.*)(?=c|b)c parsed_regex: (.*)(?=c|b)c str: abcd result_expr: $1 expected_results ab
+16_y: OK regex: (.*)(?=[bc]) parsed_regex: (.*)(?=[bc]) str: abcd result_expr: $1 expected_results ab
+17_yB: OK regex: (.*)(?=[bc])c parsed_regex: (.*)(?=[bc])c str: abcd result_expr: $1 expected_results ab
+18_y: OK regex: (.*?)(?=c) parsed_regex: (.*?)(?=c) str: abcd result_expr: $1 expected_results ab
+19_yB: OK regex: (.*?)(?=c)c parsed_regex: (.*?)(?=c)c str: abcd result_expr: $1 expected_results ab
+20_y: OK regex: (.*?)(?=b|c) parsed_regex: (.*?)(?=b|c) str: abcd result_expr: $1 expected_results a
+21_y: OK regex: (.*?)(?=b|c)c parsed_regex: (.*?)(?=b|c)c str: abcd result_expr: $1 expected_results ab
+22_y: OK regex: (.*?)(?=c|b) parsed_regex: (.*?)(?=c|b) str: abcd result_expr: $1 expected_results a
+23_y: OK regex: (.*?)(?=c|b)c parsed_regex: (.*?)(?=c|b)c str: abcd result_expr: $1 expected_results ab
+24_y: OK regex: (.*?)(?=[bc]) parsed_regex: (.*?)(?=[bc]) str: abcd result_expr: $1 expected_results a
+25_yB: OK regex: (.*?)(?=[bc])c parsed_regex: (.*?)(?=[bc])c str: abcd result_expr: $1 expected_results ab
+26_y: OK regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) parsed_regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) str: aaaaaaaa result_expr: $1 expected_results aaaaaaa
+27_y: OK regex: a(?!b(?!c))(..) parsed_regex: a(?!b(?!c))(..) str: abababc result_expr: $1 expected_results bc
+28_y: OK regex: a(?!b(?=a))(..) parsed_regex: a(?!b(?=a))(..) str: abababc result_expr: $1 expected_results bc
+37_y: OK regex: X(\w+)(?=\s)|X(\w+) parsed_regex: X(\w+)(?=\s)|X(\w+) str: Xab result_expr: [$1-$2] expected_results [-ab]
+38_y: OK regex: ^a*(?=b)b parsed_regex: ^a*(?=b)b str: ab result_expr: $& expected_results ab
+39_y: OK regex: '(?!\A)x'm parsed_regex: '(?!\A)x'm str: a
+xb
+ result_expr: - expected_results -
+40_n: OK regex: '^(o)(?!.*\1)'i parsed_regex: '^(o)(?!.*\1)'i str: Oo result_expr: - expected_results -
+41_n: OK regex: .*a(?!(b|cd)*e).*f parsed_regex: .*a(?!(b|cd)*e).*f str: ......abef result_expr: - expected_results -
+42_y: OK regex: ^(a*?)(?!(aa|aaaa)*$) parsed_regex: ^(a*?)(?!(aa|aaaa)*$) str: aaaaaaaaaaaaaaaaaaaa result_expr: $1 expected_results a
+43_y: OK regex: (?!)+?|(.{2,4}) parsed_regex: (?!)+?|(.{2,4}) str: abcde result_expr: $1 expected_results abcd
+44_y: OK regex: ^(a*?)(?!(a{6}|a{5})*$) parsed_regex: ^(a*?)(?!(a{6}|a{5})*$) str: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa result_expr: $+[1] expected_results 12
+45_y: OK regex: a(?!b(?!c(?!d(?!e))))...(.) parsed_regex: a(?!b(?!c(?!d(?!e))))...(.) str: abxabcdxabcde result_expr: $1 expected_results e
+46_y: OK regex: X(?!b+(?!(c+)*(?!(c+)*d))).*X parsed_regex: X(?!b+(?!(c+)*(?!(c+)*d))).*X str: aXbbbbbbbcccccccccccccaaaX result_expr: - expected_results -
+47_y: OK regex: ((?s).)c(?!.) parsed_regex: ((?s).)c(?!.) str: a
+b
+c
+ result_expr: $1 expected_results 
+
+48_y: OK regex: ((?s).)c(?!.) parsed_regex: ((?s).)c(?!.) str: a
+b
+c
+ result_expr: $1:$& expected_results 
+:
+c
+49_y: OK regex: ((?s)b.)c(?!.) parsed_regex: ((?s)b.)c(?!.) str: a
+b
+c
+ result_expr: $1 expected_results b
+
+50_y: OK regex: ((?s)b.)c(?!.) parsed_regex: ((?s)b.)c(?!.) str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+51_y: OK regex: ((?s)b.)c(?!\N) parsed_regex: ((?s)b.)c(?!\N) str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+52_y: OK regex: '(b.)c(?!\N)'s parsed_regex: '(b.)c(?!\N)'s str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+53_n: OK regex: a*(?!) parsed_regex: a*(?!) str: aaaab result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_19_lookahead.cpp.output b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_19_lookahead.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_01_char_matcher.cpp.execution b/regression-tests/test-results/clang-12-c++20/pure2-regex_01_char_matcher.cpp.execution
new file mode 100644
index 000000000..af124736e
--- /dev/null
+++ b/regression-tests/test-results/clang-12-c++20/pure2-regex_01_char_matcher.cpp.execution
@@ -0,0 +1,14 @@
+Running tests_01_char_matcher:
+01_y: OK regex: abc parsed_regex: abc str: abc result_expr: $& expected_results abc
+02_y: OK regex: abc parsed_regex: abc str: abc result_expr: $-[0] expected_results 0
+03_y: OK regex: abc parsed_regex: abc str: abc result_expr: $+[0] expected_results 3
+04_n: OK regex: abc parsed_regex: abc str: xbc result_expr: - expected_results -
+05_n: OK regex: abc parsed_regex: abc str: axc result_expr: - expected_results -
+06_n: OK regex: abc parsed_regex: abc str: abx result_expr: - expected_results -
+07_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $& expected_results abc
+08_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $-[0] expected_results 1
+09_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $+[0] expected_results 4
+10_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $& expected_results abc
+11_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $-[0] expected_results 2
+12_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $+[0] expected_results 5
+
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_01_char_matcher.cpp.output b/regression-tests/test-results/clang-12-c++20/pure2-regex_01_char_matcher.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_02_ranges.cpp.execution b/regression-tests/test-results/clang-12-c++20/pure2-regex_02_ranges.cpp.execution
new file mode 100644
index 000000000..dc0b36002
--- /dev/null
+++ b/regression-tests/test-results/clang-12-c++20/pure2-regex_02_ranges.cpp.execution
@@ -0,0 +1,42 @@
+Running tests_02_ranges:
+01_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $& expected_results abc
+02_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $-[0] expected_results 0
+03_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $+[0] expected_results 3
+04_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $& expected_results abc
+05_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $-[0] expected_results 0
+06_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $+[0] expected_results 3
+07_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $& expected_results abbc
+08_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $-[0] expected_results 0
+09_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $+[0] expected_results 4
+10_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $& expected_results abbbbc
+11_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $-[0] expected_results 0
+12_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $+[0] expected_results 6
+13_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $& expected_results abbbbc
+14_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $-[0] expected_results 0
+15_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $+[0] expected_results 6
+16_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $& expected_results abbc
+17_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $-[0] expected_results 0
+18_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $+[0] expected_results 4
+19_n: OK regex: ab+bc parsed_regex: ab+bc str: abc result_expr: - expected_results -
+20_n: OK regex: ab+bc parsed_regex: ab+bc str: abq result_expr: - expected_results -
+21_n: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abq result_expr: - expected_results -
+22_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $& expected_results abbbbc
+23_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $-[0] expected_results 0
+24_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $+[0] expected_results 6
+25_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $& expected_results abbbbc
+26_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $-[0] expected_results 0
+27_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $+[0] expected_results 6
+28_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $& expected_results abbbbc
+29_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $-[0] expected_results 0
+30_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $+[0] expected_results 6
+31_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $& expected_results abbbbc
+32_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $-[0] expected_results 0
+33_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $+[0] expected_results 6
+34_n: OK regex: ab{4,5}bc parsed_regex: ab{4,5}bc str: abbbbc result_expr: - expected_results -
+35_y: OK regex: ab?bc parsed_regex: ab?bc str: abbc result_expr: $& expected_results abbc
+36_y: OK regex: ab?bc parsed_regex: ab?bc str: abc result_expr: $& expected_results abc
+37_y: OK regex: ab{0,1}bc parsed_regex: ab{0,1}bc str: abc result_expr: $& expected_results abc
+38_n: OK regex: ab?bc parsed_regex: ab?bc str: abbbbc result_expr: - expected_results -
+39_y: OK regex: ab?c parsed_regex: ab?c str: abc result_expr: $& expected_results abc
+40_y: OK regex: ab{0,1}c parsed_regex: ab{0,1}c str: abc result_expr: $& expected_results abc
+
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_02_ranges.cpp.output b/regression-tests/test-results/clang-12-c++20/pure2-regex_02_ranges.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_03_wildcard.cpp.execution b/regression-tests/test-results/clang-12-c++20/pure2-regex_03_wildcard.cpp.execution
new file mode 100644
index 000000000..f3f0ea9cc
--- /dev/null
+++ b/regression-tests/test-results/clang-12-c++20/pure2-regex_03_wildcard.cpp.execution
@@ -0,0 +1,22 @@
+Running tests_03_wildcard:
+01_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $& expected_results a
+02_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $-[0] expected_results 0
+03_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $+[0] expected_results 1
+04_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $& expected_results abbb
+05_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $-[0] expected_results 0
+06_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+07_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $& expected_results a
+08_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $-[0] expected_results 0
+09_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $+[0] expected_results 1
+10_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $& expected_results abbb
+11_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $-[0] expected_results 0
+12_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+13_y: OK Warning: Parsed regex does not match. regex: \N{ 3 , 4 } parsed_regex: \N{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+14_y: OK regex: a.c parsed_regex: a.c str: abc result_expr: $& expected_results abc
+15_y: OK regex: a.c parsed_regex: a.c str: axc result_expr: $& expected_results axc
+16_y: OK regex: a\Nc parsed_regex: a\Nc str: abc result_expr: $& expected_results abc
+17_y: OK regex: a.*c parsed_regex: a.*c str: axyzc result_expr: $& expected_results axyzc
+18_y: OK regex: a\N*c parsed_regex: a\N*c str: axyzc result_expr: $& expected_results axyzc
+19_n: OK regex: a.*c parsed_regex: a.*c str: axyzd result_expr: - expected_results -
+20_n: OK regex: a\N*c parsed_regex: a\N*c str: axyzd result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_03_wildcard.cpp.output b/regression-tests/test-results/clang-12-c++20/pure2-regex_03_wildcard.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_04_start_end.cpp.execution b/regression-tests/test-results/clang-12-c++20/pure2-regex_04_start_end.cpp.execution
new file mode 100644
index 000000000..6fef36434
--- /dev/null
+++ b/regression-tests/test-results/clang-12-c++20/pure2-regex_04_start_end.cpp.execution
@@ -0,0 +1,11 @@
+Running tests_04_start_end:
+01_y: OK regex: ^abc$ parsed_regex: ^abc$ str: abc result_expr: $& expected_results abc
+02_n: OK regex: ^abc$ parsed_regex: ^abc$ str: abcc result_expr: - expected_results -
+03_y: OK regex: ^abc parsed_regex: ^abc str: abcc result_expr: $& expected_results abc
+04_n: OK regex: ^abc$ parsed_regex: ^abc$ str: aabc result_expr: - expected_results -
+05_y: OK regex: abc$ parsed_regex: abc$ str: aabc result_expr: $& expected_results abc
+06_n: OK regex: abc$ parsed_regex: abc$ str: aabcd result_expr: - expected_results -
+07_y: OK regex: ^ parsed_regex: ^ str: abc result_expr: $& expected_results 
+08_y: OK regex: $ parsed_regex: $ str: abc result_expr: $& expected_results 
+09_n: OK regex: $b parsed_regex: $b str: b result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_04_start_end.cpp.output b/regression-tests/test-results/clang-12-c++20/pure2-regex_04_start_end.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_05_classes.cpp.execution b/regression-tests/test-results/clang-12-c++20/pure2-regex_05_classes.cpp.execution
new file mode 100644
index 000000000..306bf3395
--- /dev/null
+++ b/regression-tests/test-results/clang-12-c++20/pure2-regex_05_classes.cpp.execution
@@ -0,0 +1,21 @@
+Running tests_05_classes:
+01_n: OK regex: a[bc]d parsed_regex: a[bc]d str: abc result_expr: - expected_results -
+02_y: OK regex: a[bc]d parsed_regex: a[bc]d str: abd result_expr: $& expected_results abd
+03_y: OK regex: a[b]d parsed_regex: a[b]d str: abd result_expr: $& expected_results abd
+04_y: OK regex: [a][b][d] parsed_regex: [a][b][d] str: abd result_expr: $& expected_results abd
+05_y: OK regex: .[b]. parsed_regex: .[b]. str: abd result_expr: $& expected_results abd
+06_n: OK regex: .[b]. parsed_regex: .[b]. str: aBd result_expr: - expected_results -
+07_n: OK regex: a[b-d]e parsed_regex: a[b-d]e str: abd result_expr: - expected_results -
+08_y: OK regex: a[b-d]e parsed_regex: a[b-d]e str: ace result_expr: $& expected_results ace
+09_y: OK regex: a[b-d] parsed_regex: a[b-d] str: aac result_expr: $& expected_results ac
+10_y: OK regex: a[-b] parsed_regex: a[-b] str: a- result_expr: $& expected_results a-
+11_y: OK regex: a[b-] parsed_regex: a[b-] str: a- result_expr: $& expected_results a-
+12_y: OK regex: a] parsed_regex: a] str: a] result_expr: $& expected_results a]
+13_y: OK regex: a[]]b parsed_regex: a[]]b str: a]b result_expr: $& expected_results a]b
+14_y: OK regex: a[^bc]d parsed_regex: a[^bc]d str: aed result_expr: $& expected_results aed
+15_n: OK regex: a[^bc]d parsed_regex: a[^bc]d str: abd result_expr: - expected_results -
+16_y: OK regex: a[^-b]c parsed_regex: a[^-b]c str: adc result_expr: $& expected_results adc
+17_n: OK regex: a[^-b]c parsed_regex: a[^-b]c str: a-c result_expr: - expected_results -
+18_n: OK regex: a[^]b]c parsed_regex: a[^]b]c str: a]c result_expr: - expected_results -
+19_y: OK regex: a[^]b]c parsed_regex: a[^]b]c str: adc result_expr: $& expected_results adc
+
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_05_classes.cpp.output b/regression-tests/test-results/clang-12-c++20/pure2-regex_05_classes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_06_boundaries.cpp.execution b/regression-tests/test-results/clang-12-c++20/pure2-regex_06_boundaries.cpp.execution
new file mode 100644
index 000000000..420a4c587
--- /dev/null
+++ b/regression-tests/test-results/clang-12-c++20/pure2-regex_06_boundaries.cpp.execution
@@ -0,0 +1,19 @@
+Running tests_06_boundaries:
+01_y: OK regex: \ba\b parsed_regex: \ba\b str: a- result_expr: - expected_results -
+02_y: OK regex: \ba\b parsed_regex: \ba\b str: -a result_expr: - expected_results -
+03_y: OK regex: \ba\b parsed_regex: \ba\b str: -a- result_expr: - expected_results -
+04_n: OK regex: \by\b parsed_regex: \by\b str: xy result_expr: - expected_results -
+05_n: OK regex: \by\b parsed_regex: \by\b str: yz result_expr: - expected_results -
+06_n: OK regex: \by\b parsed_regex: \by\b str: xyz result_expr: - expected_results -
+07_n: OK regex: \Ba\B parsed_regex: \Ba\B str: a- result_expr: - expected_results -
+08_n: OK regex: \Ba\B parsed_regex: \Ba\B str: -a result_expr: - expected_results -
+09_n: OK regex: \Ba\B parsed_regex: \Ba\B str: -a- result_expr: - expected_results -
+10_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: - expected_results -
+11_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: $-[0] expected_results 1
+12_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: $+[0] expected_results 2
+13_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: - expected_results -
+14_y: OK regex: \by\B parsed_regex: \by\B str: yz result_expr: - expected_results -
+15_y: OK regex: \By\B parsed_regex: \By\B str: xyz result_expr: - expected_results -
+16_n: OK regex: \b parsed_regex: \b str:  result_expr: - expected_results -
+17_y: OK regex: \B parsed_regex: \B str:  result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_06_boundaries.cpp.output b/regression-tests/test-results/clang-12-c++20/pure2-regex_06_boundaries.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_07_short_classes.cpp.execution b/regression-tests/test-results/clang-12-c++20/pure2-regex_07_short_classes.cpp.execution
new file mode 100644
index 000000000..519c05f92
--- /dev/null
+++ b/regression-tests/test-results/clang-12-c++20/pure2-regex_07_short_classes.cpp.execution
@@ -0,0 +1,26 @@
+Running tests_07_short_classes:
+01_y: OK regex: \w parsed_regex: \w str: a result_expr: - expected_results -
+02_n: OK regex: \w parsed_regex: \w str: - result_expr: - expected_results -
+03_n: OK regex: \W parsed_regex: \W str: a result_expr: - expected_results -
+04_y: OK regex: \W parsed_regex: \W str: - result_expr: - expected_results -
+05_y: OK regex: a\sb parsed_regex: a\sb str: a b result_expr: - expected_results -
+06_n: OK regex: a\sb parsed_regex: a\sb str: a-b result_expr: - expected_results -
+07_n: OK regex: a\Sb parsed_regex: a\Sb str: a b result_expr: - expected_results -
+08_y: OK regex: a\Sb parsed_regex: a\Sb str: a-b result_expr: - expected_results -
+09_y: OK regex: \d parsed_regex: \d str: 1 result_expr: - expected_results -
+10_n: OK regex: \d parsed_regex: \d str: - result_expr: - expected_results -
+11_n: OK regex: \D parsed_regex: \D str: 1 result_expr: - expected_results -
+12_y: OK regex: \D parsed_regex: \D str: - result_expr: - expected_results -
+13_y: OK regex: [\w] parsed_regex: [\w] str: a result_expr: - expected_results -
+14_n: OK regex: [\w] parsed_regex: [\w] str: - result_expr: - expected_results -
+15_n: OK regex: [\W] parsed_regex: [\W] str: a result_expr: - expected_results -
+16_y: OK regex: [\W] parsed_regex: [\W] str: - result_expr: - expected_results -
+17_y: OK regex: a[\s]b parsed_regex: a[\s]b str: a b result_expr: - expected_results -
+18_n: OK regex: a[\s]b parsed_regex: a[\s]b str: a-b result_expr: - expected_results -
+19_n: OK regex: a[\S]b parsed_regex: a[\S]b str: a b result_expr: - expected_results -
+20_y: OK regex: a[\S]b parsed_regex: a[\S]b str: a-b result_expr: - expected_results -
+21_y: OK regex: [\d] parsed_regex: [\d] str: 1 result_expr: - expected_results -
+22_n: OK regex: [\d] parsed_regex: [\d] str: - result_expr: - expected_results -
+23_n: OK regex: [\D] parsed_regex: [\D] str: 1 result_expr: - expected_results -
+24_y: OK regex: [\D] parsed_regex: [\D] str: - result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_07_short_classes.cpp.output b/regression-tests/test-results/clang-12-c++20/pure2-regex_07_short_classes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_08_alternatives.cpp.execution b/regression-tests/test-results/clang-12-c++20/pure2-regex_08_alternatives.cpp.execution
new file mode 100644
index 000000000..c12fd2afe
--- /dev/null
+++ b/regression-tests/test-results/clang-12-c++20/pure2-regex_08_alternatives.cpp.execution
@@ -0,0 +1,4 @@
+Running tests_08_alternatives:
+01_y: OK regex: ab|cd parsed_regex: ab|cd str: abc result_expr: $& expected_results ab
+02_y: OK regex: ab|cd parsed_regex: ab|cd str: abcd result_expr: $& expected_results ab
+
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_08_alternatives.cpp.output b/regression-tests/test-results/clang-12-c++20/pure2-regex_08_alternatives.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_09_groups.cpp.execution b/regression-tests/test-results/clang-12-c++20/pure2-regex_09_groups.cpp.execution
new file mode 100644
index 000000000..05df860f9
--- /dev/null
+++ b/regression-tests/test-results/clang-12-c++20/pure2-regex_09_groups.cpp.execution
@@ -0,0 +1,13 @@
+Running tests_09_groups:
+01_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $&-$1 expected_results ef-
+02_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $-[0] expected_results 1
+03_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $+[0] expected_results 3
+04_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $-[1] expected_results 1
+05_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $+[1] expected_results 1
+06_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $&-$1-$2 expected_results a-a-a
+07_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $-[0]-$-[1]-$-[2] expected_results 0-0-0
+08_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $+[0]-$+[1]-$+[2] expected_results 1-1-1
+09_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $&-$1-$2 expected_results abc-a-c
+10_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $-[0]-$-[1]-$-[2] expected_results 0-0-2
+11_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $+[0]-$+[1]-$+[2] expected_results 3-1-3
+
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_09_groups.cpp.output b/regression-tests/test-results/clang-12-c++20/pure2-regex_09_groups.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_10_escapes.cpp.execution b/regression-tests/test-results/clang-12-c++20/pure2-regex_10_escapes.cpp.execution
new file mode 100644
index 000000000..fe6e6efc9
--- /dev/null
+++ b/regression-tests/test-results/clang-12-c++20/pure2-regex_10_escapes.cpp.execution
@@ -0,0 +1,39 @@
+Running tests_10_escapes:
+01_y: OK regex: a\(b parsed_regex: a\(b str: a(b result_expr: $&-$1 expected_results a(b-
+02_y: OK regex: a\(*b parsed_regex: a\(*b str: ab result_expr: $& expected_results ab
+03_y: OK regex: a\(*b parsed_regex: a\(*b str: a((b result_expr: $& expected_results a((b
+04_y: OK regex: a\\b parsed_regex: a\\b str: a\b result_expr: $& expected_results a\b
+05_y: OK regex: foo(\h+)bar parsed_regex: foo(\h+)bar str: foo	bar result_expr: $1 expected_results 	
+06_y: OK regex: (\H+)(\h) parsed_regex: (\H+)(\h) str: foo	bar result_expr: $1-$2 expected_results foo-	
+07_y: OK regex: (\h+)(\H) parsed_regex: (\h+)(\H) str: foo	bar result_expr: $1-$2 expected_results 	-b
+08_y: OK regex: foo(\h)bar parsed_regex: foo(\h)bar str: foo	bar result_expr: $1 expected_results 	
+09_y: OK regex: (\H)(\h) parsed_regex: (\H)(\h) str: foo	bar result_expr: $1-$2 expected_results o-	
+10_y: OK regex: (\h)(\H) parsed_regex: (\h)(\H) str: foo	bar result_expr: $1-$2 expected_results 	-b
+11_y: OK regex: foo(\v+)bar parsed_regex: foo(\v+)bar str: foo
+
+
+bar result_expr: $1 expected_results 
+
+
+
+12_y: OK regex: (\V+)(\v) parsed_regex: (\V+)(\v) str: foo
+
+
+bar result_expr: $1-$2 expected_results foo-
+13_y: OK regex: (\v+)(\V) parsed_regex: (\v+)(\V) str: foo
+
+
+bar result_expr: $1-$2 expected_results 
+
+
+-b
+14_y: OK regex: foo(\v)bar parsed_regex: foo(\v)bar str: foo
bar result_expr: $1 expected_results 
+15_y: OK regex: (\V)(\v) parsed_regex: (\V)(\v) str: foo
bar result_expr: $1-$2 expected_results o-
+16_y: OK regex: (\v)(\V) parsed_regex: (\v)(\V) str: foo
bar result_expr: $1-$2 expected_results 
-b
+17_y: OK regex: foo\t\n\r\f\a\ebar parsed_regex: foo\t\n\r\f\a\ebar str: foo	
+
bar result_expr: $& expected_results foo	
+
bar
+18_y: OK regex: foo\Kbar parsed_regex: foo\Kbar str: foobar result_expr: $& expected_results bar
+19_y: OK regex: \x41\x42 parsed_regex: \x41\x42 str: AB result_expr: $& expected_results AB
+20_y: OK regex: \101\o{102} parsed_regex: \101\o{102} str: AB result_expr: $& expected_results AB
+
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_10_escapes.cpp.output b/regression-tests/test-results/clang-12-c++20/pure2-regex_10_escapes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_11_group_references.cpp.execution b/regression-tests/test-results/clang-12-c++20/pure2-regex_11_group_references.cpp.execution
new file mode 100644
index 000000000..724d0085a
--- /dev/null
+++ b/regression-tests/test-results/clang-12-c++20/pure2-regex_11_group_references.cpp.execution
@@ -0,0 +1,26 @@
+Running tests_11_group_references:
+01_y: OK regex: (foo)(\g-2) parsed_regex: (foo)(\g-2) str: foofoo result_expr: $1-$2 expected_results foo-foo
+02_y: OK regex: (foo)(\g-2)(foo)(\g-2) parsed_regex: (foo)(\g-2)(foo)(\g-2) str: foofoofoofoo result_expr: $1-$2-$3-$4 expected_results foo-foo-foo-foo
+03_y: OK regex: (([abc]+) \g-1)(([abc]+) \g{-1}) parsed_regex: (([abc]+) \g-1)(([abc]+) \g{-1}) str: abc abccba cba result_expr: $2-$4 expected_results abc-cba
+04_y: OK regex: (a)(b)(c)\g1\g2\g3 parsed_regex: (a)(b)(c)\g1\g2\g3 str: abcabc result_expr: $1$2$3 expected_results abc
+05_y: OK regex: /(?'n'foo) \g{n}/ parsed_regex: /(?'n'foo) \g{n}/ str: ..foo foo.. result_expr: $1 expected_results foo
+06_y: OK regex: /(?'n'foo) \g{ n }/ parsed_regex: /(?'n'foo) \g{ n }/ str: ..foo foo.. result_expr: $1 expected_results foo
+07_yM: OK regex: /(?'n'foo) \g{n}/ parsed_regex: /(?'n'foo) \g{n}/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+08_y: OK regex: /(?<n>foo) \g{n}/ parsed_regex: /(?<n>foo) \g{n}/ str: ..foo foo.. result_expr: $1 expected_results foo
+09_yM: OK regex: /(?<n>foo) \g{n}/ parsed_regex: /(?<n>foo) \g{n}/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+10_y: OK regex: /(?<as>as) (\w+) \g{as} (\w+)/ parsed_regex: /(?<as>as) (\w+) \g{as} (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+11_y: OK regex: /(?'n'foo) \k<n>/ parsed_regex: /(?'n'foo) \k<n>/ str: ..foo foo.. result_expr: $1 expected_results foo
+12_yM: OK regex: /(?'n'foo) \k<n>/ parsed_regex: /(?'n'foo) \k<n>/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+13_y: OK regex: /(?<n>foo) \k'n'/ parsed_regex: /(?<n>foo) \k'n'/ str: ..foo foo.. result_expr: $1 expected_results foo
+14_yM: OK regex: /(?<n>foo) \k'n'/ parsed_regex: /(?<n>foo) \k'n'/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+15_yM: OK regex: /(?'a1'foo) \k'a1'/ parsed_regex: /(?'a1'foo) \k'a1'/ str: ..foo foo.. result_expr: $+{a1} expected_results foo
+16_yM: OK regex: /(?<a1>foo) \k<a1>/ parsed_regex: /(?<a1>foo) \k<a1>/ str: ..foo foo.. result_expr: $+{a1} expected_results foo
+17_yM: OK regex: /(?'_'foo) \k'_'/ parsed_regex: /(?'_'foo) \k'_'/ str: ..foo foo.. result_expr: $+{_} expected_results foo
+18_yM: OK regex: /(?<_>foo) \k<_>/ parsed_regex: /(?<_>foo) \k<_>/ str: ..foo foo.. result_expr: $+{_} expected_results foo
+19_yM: OK regex: /(?'_0_'foo) \k'_0_'/ parsed_regex: /(?'_0_'foo) \k'_0_'/ str: ..foo foo.. result_expr: $+{_0_} expected_results foo
+20_yM: OK regex: /(?<_0_>foo) \k<_0_>/ parsed_regex: /(?<_0_>foo) \k<_0_>/ str: ..foo foo.. result_expr: $+{_0_} expected_results foo
+21_y: OK regex: /(?<as>as) (\w+) \k<as> (\w+)/ parsed_regex: /(?<as>as) (\w+) \k<as> (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+22_y: OK regex: /(?<as>as) (\w+) \k{as} (\w+)/ parsed_regex: /(?<as>as) (\w+) \k{as} (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+23_y: OK regex: /(?<as>as) (\w+) \k'as' (\w+)/ parsed_regex: /(?<as>as) (\w+) \k'as' (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+24_y: OK regex: /(?<as>as) (\w+) \k{ as } (\w+)/ parsed_regex: /(?<as>as) (\w+) \k{ as } (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_11_group_references.cpp.output b/regression-tests/test-results/clang-12-c++20/pure2-regex_11_group_references.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_12_case_insensitive.cpp.execution b/regression-tests/test-results/clang-12-c++20/pure2-regex_12_case_insensitive.cpp.execution
new file mode 100644
index 000000000..4939deb24
--- /dev/null
+++ b/regression-tests/test-results/clang-12-c++20/pure2-regex_12_case_insensitive.cpp.execution
@@ -0,0 +1,121 @@
+Running tests_12_case_insensitive:
+01_y: OK regex: 'abc'i parsed_regex: 'abc'i str: ABC result_expr: $& expected_results ABC
+02_n: OK regex: 'abc'i parsed_regex: 'abc'i str: XBC result_expr: - expected_results -
+03_n: OK regex: 'abc'i parsed_regex: 'abc'i str: AXC result_expr: - expected_results -
+04_n: OK regex: 'abc'i parsed_regex: 'abc'i str: ABX result_expr: - expected_results -
+05_y: OK regex: 'abc'i parsed_regex: 'abc'i str: XABCY result_expr: $& expected_results ABC
+06_y: OK regex: 'abc'i parsed_regex: 'abc'i str: ABABC result_expr: $& expected_results ABC
+07_y: OK regex: 'ab*c'i parsed_regex: 'ab*c'i str: ABC result_expr: $& expected_results ABC
+08_y: OK regex: 'ab*bc'i parsed_regex: 'ab*bc'i str: ABC result_expr: $& expected_results ABC
+09_y: OK regex: 'ab*bc'i parsed_regex: 'ab*bc'i str: ABBC result_expr: $& expected_results ABBC
+10_y: OK regex: 'ab*?bc'i parsed_regex: 'ab*?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+11_y: OK regex: 'ab{0,}?bc'i parsed_regex: 'ab{0,}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+12_y: OK regex: 'ab+?bc'i parsed_regex: 'ab+?bc'i str: ABBC result_expr: $& expected_results ABBC
+13_n: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABC result_expr: - expected_results -
+14_n: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABQ result_expr: - expected_results -
+15_n: OK regex: 'ab{1,}bc'i parsed_regex: 'ab{1,}bc'i str: ABQ result_expr: - expected_results -
+16_y: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+17_y: OK regex: 'ab{1,}?bc'i parsed_regex: 'ab{1,}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+18_y: OK regex: 'ab{1,3}?bc'i parsed_regex: 'ab{1,3}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+19_y: OK regex: 'ab{3,4}?bc'i parsed_regex: 'ab{3,4}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+20_n: OK regex: 'ab{4,5}?bc'i parsed_regex: 'ab{4,5}?bc'i str: ABBBBC result_expr: - expected_results -
+21_y: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABBC result_expr: $& expected_results ABBC
+22_y: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABC result_expr: $& expected_results ABC
+23_y: OK regex: 'ab{0,1}?bc'i parsed_regex: 'ab{0,1}?bc'i str: ABC result_expr: $& expected_results ABC
+24_n: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABBBBC result_expr: - expected_results -
+25_y: OK regex: 'ab??c'i parsed_regex: 'ab??c'i str: ABC result_expr: $& expected_results ABC
+26_y: OK regex: 'ab{0,1}?c'i parsed_regex: 'ab{0,1}?c'i str: ABC result_expr: $& expected_results ABC
+27_y: OK regex: '^abc$'i parsed_regex: '^abc$'i str: ABC result_expr: $& expected_results ABC
+28_n: OK regex: '^abc$'i parsed_regex: '^abc$'i str: ABCC result_expr: - expected_results -
+29_y: OK regex: '^abc'i parsed_regex: '^abc'i str: ABCC result_expr: $& expected_results ABC
+30_n: OK regex: '^abc$'i parsed_regex: '^abc$'i str: AABC result_expr: - expected_results -
+31_y: OK regex: 'abc$'i parsed_regex: 'abc$'i str: AABC result_expr: $& expected_results ABC
+32_y: OK regex: '^'i parsed_regex: '^'i str: ABC result_expr: $& expected_results 
+33_y: OK regex: '$'i parsed_regex: '$'i str: ABC result_expr: $& expected_results 
+34_y: OK regex: 'a.c'i parsed_regex: 'a.c'i str: ABC result_expr: $& expected_results ABC
+35_y: OK regex: 'a.c'i parsed_regex: 'a.c'i str: AXC result_expr: $& expected_results AXC
+36_y: OK regex: 'a\Nc'i parsed_regex: 'a\Nc'i str: ABC result_expr: $& expected_results ABC
+37_y: OK regex: 'a.*?c'i parsed_regex: 'a.*?c'i str: AXYZC result_expr: $& expected_results AXYZC
+38_n: OK regex: 'a.*c'i parsed_regex: 'a.*c'i str: AXYZD result_expr: - expected_results -
+39_n: OK regex: 'a[bc]d'i parsed_regex: 'a[bc]d'i str: ABC result_expr: - expected_results -
+40_y: OK regex: 'a[bc]d'i parsed_regex: 'a[bc]d'i str: ABD result_expr: $& expected_results ABD
+41_n: OK regex: 'a[b-d]e'i parsed_regex: 'a[b-d]e'i str: ABD result_expr: - expected_results -
+42_y: OK regex: 'a[b-d]e'i parsed_regex: 'a[b-d]e'i str: ACE result_expr: $& expected_results ACE
+43_y: OK regex: 'a[b-d]'i parsed_regex: 'a[b-d]'i str: AAC result_expr: $& expected_results AC
+44_y: OK regex: 'a[-b]'i parsed_regex: 'a[-b]'i str: A- result_expr: $& expected_results A-
+45_y: OK regex: 'a[b-]'i parsed_regex: 'a[b-]'i str: A- result_expr: $& expected_results A-
+46_y: OK regex: 'a]'i parsed_regex: 'a]'i str: A] result_expr: $& expected_results A]
+47_y: OK regex: 'a[]]b'i parsed_regex: 'a[]]b'i str: A]B result_expr: $& expected_results A]B
+48_y: OK regex: 'a[^bc]d'i parsed_regex: 'a[^bc]d'i str: AED result_expr: $& expected_results AED
+49_n: OK regex: 'a[^bc]d'i parsed_regex: 'a[^bc]d'i str: ABD result_expr: - expected_results -
+50_y: OK regex: 'a[^-b]c'i parsed_regex: 'a[^-b]c'i str: ADC result_expr: $& expected_results ADC
+51_n: OK regex: 'a[^-b]c'i parsed_regex: 'a[^-b]c'i str: A-C result_expr: - expected_results -
+52_n: OK regex: 'a[^]b]c'i parsed_regex: 'a[^]b]c'i str: A]C result_expr: - expected_results -
+53_y: OK regex: 'a[^]b]c'i parsed_regex: 'a[^]b]c'i str: ADC result_expr: $& expected_results ADC
+54_y: OK regex: 'ab|cd'i parsed_regex: 'ab|cd'i str: ABC result_expr: $& expected_results AB
+55_y: OK regex: 'ab|cd'i parsed_regex: 'ab|cd'i str: ABCD result_expr: $& expected_results AB
+56_y: OK regex: '()ef'i parsed_regex: '()ef'i str: DEF result_expr: $&-$1 expected_results EF-
+57_n: OK regex: '$b'i parsed_regex: '$b'i str: B result_expr: - expected_results -
+58_y: OK regex: 'a\(b'i parsed_regex: 'a\(b'i str: A(B result_expr: $&-$1 expected_results A(B-
+59_y: OK regex: 'a\(*b'i parsed_regex: 'a\(*b'i str: AB result_expr: $& expected_results AB
+60_y: OK regex: 'a\(*b'i parsed_regex: 'a\(*b'i str: A((B result_expr: $& expected_results A((B
+61_y: OK regex: 'a\\b'i parsed_regex: 'a\\b'i str: A\B result_expr: $& expected_results A\B
+62_y: OK regex: '((a))'i parsed_regex: '((a))'i str: ABC result_expr: $&-$1-$2 expected_results A-A-A
+63_y: OK regex: '(a)b(c)'i parsed_regex: '(a)b(c)'i str: ABC result_expr: $&-$1-$2 expected_results ABC-A-C
+64_y: OK regex: 'a+b+c'i parsed_regex: 'a+b+c'i str: AABBABC result_expr: $& expected_results ABC
+65_y: OK regex: 'a{1,}b{1,}c'i parsed_regex: 'a{1,}b{1,}c'i str: AABBABC result_expr: $& expected_results ABC
+66_y: OK regex: 'a.+?c'i parsed_regex: 'a.+?c'i str: ABCABC result_expr: $& expected_results ABC
+67_y: OK regex: 'a.*?c'i parsed_regex: 'a.*?c'i str: ABCABC result_expr: $& expected_results ABC
+68_y: OK regex: 'a.{0,5}?c'i parsed_regex: 'a.{0,5}?c'i str: ABCABC result_expr: $& expected_results ABC
+69_y: OK regex: '(a+|b)*'i parsed_regex: '(a+|b)*'i str: AB result_expr: $&-$1 expected_results AB-B
+70_y: OK regex: '(a+|b){0,}'i parsed_regex: '(a+|b){0,}'i str: AB result_expr: $&-$1 expected_results AB-B
+71_y: OK regex: '(a+|b)+'i parsed_regex: '(a+|b)+'i str: AB result_expr: $&-$1 expected_results AB-B
+72_y: OK regex: '(a+|b){1,}'i parsed_regex: '(a+|b){1,}'i str: AB result_expr: $&-$1 expected_results AB-B
+73_y: OK regex: '(a+|b)?'i parsed_regex: '(a+|b)?'i str: AB result_expr: $&-$1 expected_results A-A
+74_y: OK regex: '(a+|b){0,1}'i parsed_regex: '(a+|b){0,1}'i str: AB result_expr: $&-$1 expected_results A-A
+75_y: OK regex: '(a+|b){0,1}?'i parsed_regex: '(a+|b){0,1}?'i str: AB result_expr: $&-$1 expected_results -
+76_y: OK regex: '[^ab]*'i parsed_regex: '[^ab]*'i str: CDE result_expr: $& expected_results CDE
+77_n: OK regex: 'abc'i parsed_regex: 'abc'i str:  result_expr: - expected_results -
+78_y: OK regex: 'a*'i parsed_regex: 'a*'i str:  result_expr: $& expected_results 
+79_y: OK regex: '([abc])*d'i parsed_regex: '([abc])*d'i str: ABBBCD result_expr: $&-$1 expected_results ABBBCD-C
+80_y: OK regex: '([abc])*bcd'i parsed_regex: '([abc])*bcd'i str: ABCD result_expr: $&-$1 expected_results ABCD-A
+81_y: OK regex: 'a|b|c|d|e'i parsed_regex: 'a|b|c|d|e'i str: E result_expr: $& expected_results E
+82_y: OK regex: '(a|b|c|d|e)f'i parsed_regex: '(a|b|c|d|e)f'i str: EF result_expr: $&-$1 expected_results EF-E
+83_y: OK regex: 'abcd*efg'i parsed_regex: 'abcd*efg'i str: ABCDEFG result_expr: $& expected_results ABCDEFG
+84_y: OK regex: 'ab*'i parsed_regex: 'ab*'i str: XABYABBBZ result_expr: $& expected_results AB
+85_y: OK regex: 'ab*'i parsed_regex: 'ab*'i str: XAYABBBZ result_expr: $& expected_results A
+86_y: OK regex: '(ab|cd)e'i parsed_regex: '(ab|cd)e'i str: ABCDE result_expr: $&-$1 expected_results CDE-CD
+87_y: OK regex: '[abhgefdc]ij'i parsed_regex: '[abhgefdc]ij'i str: HIJ result_expr: $& expected_results HIJ
+88_n: OK regex: '^(ab|cd)e'i parsed_regex: '^(ab|cd)e'i str: ABCDE result_expr: x$1y expected_results XY
+89_y: OK regex: '(abc|)ef'i parsed_regex: '(abc|)ef'i str: ABCDEF result_expr: $&-$1 expected_results EF-
+90_y: OK regex: '(a|b)c*d'i parsed_regex: '(a|b)c*d'i str: ABCD result_expr: $&-$1 expected_results BCD-B
+91_y: OK regex: '(ab|ab*)bc'i parsed_regex: '(ab|ab*)bc'i str: ABC result_expr: $&-$1 expected_results ABC-A
+92_y: OK regex: 'a([bc]*)c*'i parsed_regex: 'a([bc]*)c*'i str: ABC result_expr: $&-$1 expected_results ABC-BC
+93_y: OK regex: 'a([bc]*)(c*d)'i parsed_regex: 'a([bc]*)(c*d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-BC-D
+94_y: OK regex: 'a([bc]+)(c*d)'i parsed_regex: 'a([bc]+)(c*d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-BC-D
+95_y: OK regex: 'a([bc]*)(c+d)'i parsed_regex: 'a([bc]*)(c+d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-B-CD
+96_y: OK regex: 'a[bcd]*dcdcde'i parsed_regex: 'a[bcd]*dcdcde'i str: ADCDCDE result_expr: $& expected_results ADCDCDE
+97_n: OK regex: 'a[bcd]+dcdcde'i parsed_regex: 'a[bcd]+dcdcde'i str: ADCDCDE result_expr: - expected_results -
+98_y: OK regex: '(ab|a)b*c'i parsed_regex: '(ab|a)b*c'i str: ABC result_expr: $&-$1 expected_results ABC-AB
+99_y: OK regex: '((a)(b)c)(d)'i parsed_regex: '((a)(b)c)(d)'i str: ABCD result_expr: $1-$2-$3-$4 expected_results ABC-A-B-D
+100_y: OK regex: '[a-zA-Z_][a-zA-Z0-9_]*'i parsed_regex: '[a-zA-Z_][a-zA-Z0-9_]*'i str: ALPHA result_expr: $& expected_results ALPHA
+101_y: OK regex: '^a(bc+|b[eh])g|.h$'i parsed_regex: '^a(bc+|b[eh])g|.h$'i str: ABH result_expr: $&-$1 expected_results BH-
+102_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: EFFGZ result_expr: $&-$1-$2 expected_results EFFGZ-EFFGZ-
+103_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: IJ result_expr: $&-$1-$2 expected_results IJ-IJ-J
+104_n: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: EFFG result_expr: - expected_results -
+105_n: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: BCDD result_expr: - expected_results -
+106_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: REFFGZ result_expr: $&-$1-$2 expected_results EFFGZ-EFFGZ-
+107_y: OK regex: '((((((((((a))))))))))'i parsed_regex: '((((((((((a))))))))))'i str: A result_expr: $10 expected_results A
+108_y: OK regex: '((((((((((a))))))))))\10'i parsed_regex: '((((((((((a))))))))))\10'i str: AA result_expr: $& expected_results AA
+109_y: OK regex: '(((((((((a)))))))))'i parsed_regex: '(((((((((a)))))))))'i str: A result_expr: $& expected_results A
+110_n: OK regex: 'multiple words of text'i parsed_regex: 'multiple words of text'i str: UH-UH result_expr: - expected_results -
+111_y: OK regex: 'multiple words'i parsed_regex: 'multiple words'i str: MULTIPLE WORDS, YEAH result_expr: $& expected_results MULTIPLE WORDS
+112_y: OK regex: '(.*)c(.*)'i parsed_regex: '(.*)c(.*)'i str: ABCDE result_expr: $&-$1-$2 expected_results ABCDE-AB-DE
+113_y: OK regex: '\((.*), (.*)\)'i parsed_regex: '\((.*), (.*)\)'i str: (A, B) result_expr: ($2, $1) expected_results (B, A)
+114_n: OK regex: '[k]'i parsed_regex: '[k]'i str: AB result_expr: - expected_results -
+115_y: OK regex: 'abcd'i parsed_regex: 'abcd'i str: ABCD result_expr: $& expected_results ABCD
+116_y: OK regex: 'a(bc)d'i parsed_regex: 'a(bc)d'i str: ABCD result_expr: $1 expected_results BC
+117_y: OK regex: 'a[-]?c'i parsed_regex: 'a[-]?c'i str: AC result_expr: $& expected_results AC
+118_y: OK regex: '(abc)\1'i parsed_regex: '(abc)\1'i str: ABCABC result_expr: $1 expected_results ABC
+119_y: OK regex: '([a-c]*)\1'i parsed_regex: '([a-c]*)\1'i str: ABCABC result_expr: $1 expected_results ABC
+
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_12_case_insensitive.cpp.output b/regression-tests/test-results/clang-12-c++20/pure2-regex_12_case_insensitive.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_13_posessive_modifier.cpp.execution b/regression-tests/test-results/clang-12-c++20/pure2-regex_13_posessive_modifier.cpp.execution
new file mode 100644
index 000000000..916d1a084
--- /dev/null
+++ b/regression-tests/test-results/clang-12-c++20/pure2-regex_13_posessive_modifier.cpp.execution
@@ -0,0 +1,50 @@
+Running tests_13_posessive_modifier:
+01_n: OK regex: a++a parsed_regex: a++a str: aaaaa result_expr: - expected_results -
+02_n: OK regex: a*+a parsed_regex: a*+a str: aaaaa result_expr: - expected_results -
+03_n: OK regex: a{1,5}+a parsed_regex: a{1,5}+a str: aaaaa result_expr: - expected_results -
+04_n: OK regex: a?+a parsed_regex: a?+a str: ab result_expr: - expected_results -
+05_y: OK regex: a++b parsed_regex: a++b str: aaaaab result_expr: $& expected_results aaaaab
+06_y: OK regex: a*+b parsed_regex: a*+b str: aaaaab result_expr: $& expected_results aaaaab
+07_y: OK regex: a{1,5}+b parsed_regex: a{1,5}+b str: aaaaab result_expr: $& expected_results aaaaab
+08_y: OK regex: a?+b parsed_regex: a?+b str: ab result_expr: $& expected_results ab
+09_n: OK regex: fooa++a parsed_regex: fooa++a str: fooaaaaa result_expr: - expected_results -
+10_n: OK regex: fooa*+a parsed_regex: fooa*+a str: fooaaaaa result_expr: - expected_results -
+11_n: OK regex: fooa{1,5}+a parsed_regex: fooa{1,5}+a str: fooaaaaa result_expr: - expected_results -
+12_n: OK regex: fooa?+a parsed_regex: fooa?+a str: fooab result_expr: - expected_results -
+13_y: OK regex: fooa++b parsed_regex: fooa++b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+14_y: OK regex: fooa*+b parsed_regex: fooa*+b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+15_y: OK regex: fooa{1,5}+b parsed_regex: fooa{1,5}+b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+16_y: OK regex: fooa?+b parsed_regex: fooa?+b str: fooab result_expr: $& expected_results fooab
+17_n: OK regex: (aA)++(aA) parsed_regex: (aA)++(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+18_n: OK regex: (aA|bB)++(aA|bB) parsed_regex: (aA|bB)++(aA|bB) str: aAaAbBaAbB result_expr: - expected_results aAaAbBaAbB
+19_n: OK regex: (aA)*+(aA) parsed_regex: (aA)*+(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+20_n: OK regex: (aA|bB)*+(aA|bB) parsed_regex: (aA|bB)*+(aA|bB) str: aAaAbBaAaA result_expr: - expected_results aAaAbBaAaA
+21_n: OK regex: (aA){1,5}+(aA) parsed_regex: (aA){1,5}+(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+22_n: OK regex: (aA|bB){1,5}+(aA|bB) parsed_regex: (aA|bB){1,5}+(aA|bB) str: aAaAbBaAaA result_expr: - expected_results aAaAbBaAaA
+23_n: OK regex: (aA)?+(aA) parsed_regex: (aA)?+(aA) str: aAb result_expr: - expected_results aAb
+24_n: OK regex: (aA|bB)?+(aA|bB) parsed_regex: (aA|bB)?+(aA|bB) str: bBb result_expr: - expected_results bBb
+25_y: OK regex: (aA)++b parsed_regex: (aA)++b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+26_y: OK regex: (aA|bB)++b parsed_regex: (aA|bB)++b str: aAbBaAaAbBb result_expr: $& expected_results aAbBaAaAbBb
+27_y: OK regex: (aA)*+b parsed_regex: (aA)*+b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+28_y: OK regex: (aA|bB)*+b parsed_regex: (aA|bB)*+b str: bBbBbBbBbBb result_expr: $& expected_results bBbBbBbBbBb
+29_y: OK regex: (aA){1,5}+b parsed_regex: (aA){1,5}+b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+30_y: OK regex: (aA|bB){1,5}+b parsed_regex: (aA|bB){1,5}+b str: bBaAbBaAbBb result_expr: $& expected_results bBaAbBaAbBb
+31_y: OK regex: (aA)?+b parsed_regex: (aA)?+b str: aAb result_expr: $& expected_results aAb
+32_y: OK regex: (aA|bB)?+b parsed_regex: (aA|bB)?+b str: bBb result_expr: $& expected_results bBb
+33_n: OK regex: foo(aA)++(aA) parsed_regex: foo(aA)++(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+34_n: OK regex: foo(aA|bB)++(aA|bB) parsed_regex: foo(aA|bB)++(aA|bB) str: foobBbBbBaAaA result_expr: - expected_results foobBbBbBaAaA
+35_n: OK regex: foo(aA)*+(aA) parsed_regex: foo(aA)*+(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+36_n: OK regex: foo(aA|bB)*+(aA|bB) parsed_regex: foo(aA|bB)*+(aA|bB) str: foobBaAbBaAaA result_expr: - expected_results foobBaAbBaAaA
+37_n: OK regex: foo(aA){1,5}+(aA) parsed_regex: foo(aA){1,5}+(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+38_n: OK regex: foo(aA|bB){1,5}+(aA|bB) parsed_regex: foo(aA|bB){1,5}+(aA|bB) str: fooaAbBbBaAaA result_expr: - expected_results fooaAbBbBaAaA
+39_n: OK regex: foo(aA)?+(aA) parsed_regex: foo(aA)?+(aA) str: fooaAb result_expr: - expected_results fooaAb
+40_n: OK regex: foo(aA|bB)?+(aA|bB) parsed_regex: foo(aA|bB)?+(aA|bB) str: foobBb result_expr: - expected_results foobBb
+41_y: OK regex: foo(aA)++b parsed_regex: foo(aA)++b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+42_y: OK regex: foo(aA|bB)++b parsed_regex: foo(aA|bB)++b str: foobBaAbBaAbBb result_expr: $& expected_results foobBaAbBaAbBb
+43_y: OK regex: foo(aA)*+b parsed_regex: foo(aA)*+b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+44_y: OK regex: foo(aA|bB)*+b parsed_regex: foo(aA|bB)*+b str: foobBbBaAaAaAb result_expr: $& expected_results foobBbBaAaAaAb
+45_y: OK regex: foo(aA){1,5}+b parsed_regex: foo(aA){1,5}+b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+46_y: OK regex: foo(aA|bB){1,5}+b parsed_regex: foo(aA|bB){1,5}+b str: foobBaAaAaAaAb result_expr: $& expected_results foobBaAaAaAaAb
+47_y: OK regex: foo(aA)?+b parsed_regex: foo(aA)?+b str: fooaAb result_expr: $& expected_results fooaAb
+48_y: OK regex: foo(aA|bB)?+b parsed_regex: foo(aA|bB)?+b str: foobBb result_expr: $& expected_results foobBb
+
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_13_posessive_modifier.cpp.output b/regression-tests/test-results/clang-12-c++20/pure2-regex_13_posessive_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_14_multiline_modifier.cpp.execution b/regression-tests/test-results/clang-12-c++20/pure2-regex_14_multiline_modifier.cpp.execution
new file mode 100644
index 000000000..9a12081ac
--- /dev/null
+++ b/regression-tests/test-results/clang-12-c++20/pure2-regex_14_multiline_modifier.cpp.execution
@@ -0,0 +1,533 @@
+Running tests_14_multiline_modifier:
+01_y: OK regex: \Z parsed_regex: \Z str: a
+b
+ result_expr: $-[0] expected_results 3
+02_y: OK regex: \z parsed_regex: \z str: a
+b
+ result_expr: $-[0] expected_results 4
+03_y: OK regex: $ parsed_regex: $ str: a
+b
+ result_expr: $-[0] expected_results 3
+04_y: OK regex: \Z parsed_regex: \Z str: b
+a
+ result_expr: $-[0] expected_results 3
+05_y: OK regex: \z parsed_regex: \z str: b
+a
+ result_expr: $-[0] expected_results 4
+06_y: OK regex: $ parsed_regex: $ str: b
+a
+ result_expr: $-[0] expected_results 3
+07_y: OK regex: \Z parsed_regex: \Z str: b
+a result_expr: $-[0] expected_results 3
+08_y: OK regex: \z parsed_regex: \z str: b
+a result_expr: $-[0] expected_results 3
+09_y: OK regex: $ parsed_regex: $ str: b
+a result_expr: $-[0] expected_results 3
+10_y: OK regex: '\Z'm parsed_regex: '\Z'm str: a
+b
+ result_expr: $-[0] expected_results 3
+11_y: OK regex: '\z'm parsed_regex: '\z'm str: a
+b
+ result_expr: $-[0] expected_results 4
+12_y: OK regex: '$'m parsed_regex: '$'m str: a
+b
+ result_expr: $-[0] expected_results 1
+13_y: OK regex: '\Z'm parsed_regex: '\Z'm str: b
+a
+ result_expr: $-[0] expected_results 3
+14_y: OK regex: '\z'm parsed_regex: '\z'm str: b
+a
+ result_expr: $-[0] expected_results 4
+15_y: OK regex: '$'m parsed_regex: '$'m str: b
+a
+ result_expr: $-[0] expected_results 1
+16_y: OK regex: '\Z'm parsed_regex: '\Z'm str: b
+a result_expr: $-[0] expected_results 3
+17_y: OK regex: '\z'm parsed_regex: '\z'm str: b
+a result_expr: $-[0] expected_results 3
+18_y: OK regex: '$'m parsed_regex: '$'m str: b
+a result_expr: $-[0] expected_results 1
+19_n: OK regex: a\Z parsed_regex: a\Z str: a
+b
+ result_expr: - expected_results -
+20_n: OK regex: a\z parsed_regex: a\z str: a
+b
+ result_expr: - expected_results -
+21_n: OK regex: a$ parsed_regex: a$ str: a
+b
+ result_expr: - expected_results -
+22_y: OK regex: a\Z parsed_regex: a\Z str: b
+a
+ result_expr: $-[0] expected_results 2
+23_n: OK regex: a\z parsed_regex: a\z str: b
+a
+ result_expr: - expected_results -
+24_y: OK regex: a$ parsed_regex: a$ str: b
+a
+ result_expr: $-[0] expected_results 2
+25_y: OK regex: a\Z parsed_regex: a\Z str: b
+a result_expr: $-[0] expected_results 2
+26_y: OK regex: a\z parsed_regex: a\z str: b
+a result_expr: $-[0] expected_results 2
+27_y: OK regex: a$ parsed_regex: a$ str: b
+a result_expr: $-[0] expected_results 2
+28_n: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: a
+b
+ result_expr: - expected_results -
+29_n: OK regex: 'a\z'm parsed_regex: 'a\z'm str: a
+b
+ result_expr: - expected_results -
+30_y: OK regex: 'a$'m parsed_regex: 'a$'m str: a
+b
+ result_expr: $-[0] expected_results 0
+31_y: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: b
+a
+ result_expr: $-[0] expected_results 2
+32_n: OK regex: 'a\z'm parsed_regex: 'a\z'm str: b
+a
+ result_expr: - expected_results -
+33_y: OK regex: 'a$'m parsed_regex: 'a$'m str: b
+a
+ result_expr: $-[0] expected_results 2
+34_y: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: b
+a result_expr: $-[0] expected_results 2
+35_y: OK regex: 'a\z'm parsed_regex: 'a\z'm str: b
+a result_expr: $-[0] expected_results 2
+36_y: OK regex: 'a$'m parsed_regex: 'a$'m str: b
+a result_expr: $-[0] expected_results 2
+37_n: OK regex: aa\Z parsed_regex: aa\Z str: aa
+b
+ result_expr: - expected_results -
+38_n: OK regex: aa\z parsed_regex: aa\z str: aa
+b
+ result_expr: - expected_results -
+39_n: OK regex: aa$ parsed_regex: aa$ str: aa
+b
+ result_expr: - expected_results -
+40_y: OK regex: aa\Z parsed_regex: aa\Z str: b
+aa
+ result_expr: $-[0] expected_results 2
+41_n: OK regex: aa\z parsed_regex: aa\z str: b
+aa
+ result_expr: - expected_results -
+42_y: OK regex: aa$ parsed_regex: aa$ str: b
+aa
+ result_expr: $-[0] expected_results 2
+43_y: OK regex: aa\Z parsed_regex: aa\Z str: b
+aa result_expr: $-[0] expected_results 2
+44_y: OK regex: aa\z parsed_regex: aa\z str: b
+aa result_expr: $-[0] expected_results 2
+45_y: OK regex: aa$ parsed_regex: aa$ str: b
+aa result_expr: $-[0] expected_results 2
+46_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: aa
+b
+ result_expr: - expected_results -
+47_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: aa
+b
+ result_expr: - expected_results -
+48_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: aa
+b
+ result_expr: $-[0] expected_results 0
+49_y: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+aa
+ result_expr: $-[0] expected_results 2
+50_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+aa
+ result_expr: - expected_results -
+51_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+aa
+ result_expr: $-[0] expected_results 2
+52_y: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+aa result_expr: $-[0] expected_results 2
+53_y: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+aa result_expr: $-[0] expected_results 2
+54_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+aa result_expr: $-[0] expected_results 2
+55_n: OK regex: aa\Z parsed_regex: aa\Z str: ac
+b
+ result_expr: - expected_results -
+56_n: OK regex: aa\z parsed_regex: aa\z str: ac
+b
+ result_expr: - expected_results -
+57_n: OK regex: aa$ parsed_regex: aa$ str: ac
+b
+ result_expr: - expected_results -
+58_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ac
+ result_expr: - expected_results -
+59_n: OK regex: aa\z parsed_regex: aa\z str: b
+ac
+ result_expr: - expected_results -
+60_n: OK regex: aa$ parsed_regex: aa$ str: b
+ac
+ result_expr: - expected_results -
+61_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ac result_expr: - expected_results -
+62_n: OK regex: aa\z parsed_regex: aa\z str: b
+ac result_expr: - expected_results -
+63_n: OK regex: aa$ parsed_regex: aa$ str: b
+ac result_expr: - expected_results -
+64_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: ac
+b
+ result_expr: - expected_results -
+65_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: ac
+b
+ result_expr: - expected_results -
+66_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: ac
+b
+ result_expr: - expected_results -
+67_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ac
+ result_expr: - expected_results -
+68_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ac
+ result_expr: - expected_results -
+69_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ac
+ result_expr: - expected_results -
+70_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ac result_expr: - expected_results -
+71_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ac result_expr: - expected_results -
+72_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ac result_expr: - expected_results -
+73_n: OK regex: aa\Z parsed_regex: aa\Z str: ca
+b
+ result_expr: - expected_results -
+74_n: OK regex: aa\z parsed_regex: aa\z str: ca
+b
+ result_expr: - expected_results -
+75_n: OK regex: aa$ parsed_regex: aa$ str: ca
+b
+ result_expr: - expected_results -
+76_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ca
+ result_expr: - expected_results -
+77_n: OK regex: aa\z parsed_regex: aa\z str: b
+ca
+ result_expr: - expected_results -
+78_n: OK regex: aa$ parsed_regex: aa$ str: b
+ca
+ result_expr: - expected_results -
+79_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ca result_expr: - expected_results -
+80_n: OK regex: aa\z parsed_regex: aa\z str: b
+ca result_expr: - expected_results -
+81_n: OK regex: aa$ parsed_regex: aa$ str: b
+ca result_expr: - expected_results -
+82_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: ca
+b
+ result_expr: - expected_results -
+83_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: ca
+b
+ result_expr: - expected_results -
+84_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: ca
+b
+ result_expr: - expected_results -
+85_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ca
+ result_expr: - expected_results -
+86_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ca
+ result_expr: - expected_results -
+87_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ca
+ result_expr: - expected_results -
+88_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ca result_expr: - expected_results -
+89_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ca result_expr: - expected_results -
+90_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ca result_expr: - expected_results -
+91_n: OK regex: ab\Z parsed_regex: ab\Z str: ab
+b
+ result_expr: - expected_results -
+92_n: OK regex: ab\z parsed_regex: ab\z str: ab
+b
+ result_expr: - expected_results -
+93_n: OK regex: ab$ parsed_regex: ab$ str: ab
+b
+ result_expr: - expected_results -
+94_y: OK regex: ab\Z parsed_regex: ab\Z str: b
+ab
+ result_expr: $-[0] expected_results 2
+95_n: OK regex: ab\z parsed_regex: ab\z str: b
+ab
+ result_expr: - expected_results -
+96_y: OK regex: ab$ parsed_regex: ab$ str: b
+ab
+ result_expr: $-[0] expected_results 2
+97_y: OK regex: ab\Z parsed_regex: ab\Z str: b
+ab result_expr: $-[0] expected_results 2
+98_y: OK regex: ab\z parsed_regex: ab\z str: b
+ab result_expr: $-[0] expected_results 2
+99_y: OK regex: ab$ parsed_regex: ab$ str: b
+ab result_expr: $-[0] expected_results 2
+100_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ab
+b
+ result_expr: - expected_results -
+101_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ab
+b
+ result_expr: - expected_results -
+102_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ab
+b
+ result_expr: $-[0] expected_results 0
+103_y: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ab
+ result_expr: $-[0] expected_results 2
+104_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ab
+ result_expr: - expected_results -
+105_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ab
+ result_expr: $-[0] expected_results 2
+106_y: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ab result_expr: $-[0] expected_results 2
+107_y: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ab result_expr: $-[0] expected_results 2
+108_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ab result_expr: $-[0] expected_results 2
+109_n: OK regex: ab\Z parsed_regex: ab\Z str: ac
+b
+ result_expr: - expected_results -
+110_n: OK regex: ab\z parsed_regex: ab\z str: ac
+b
+ result_expr: - expected_results -
+111_n: OK regex: ab$ parsed_regex: ab$ str: ac
+b
+ result_expr: - expected_results -
+112_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ac
+ result_expr: - expected_results -
+113_n: OK regex: ab\z parsed_regex: ab\z str: b
+ac
+ result_expr: - expected_results -
+114_n: OK regex: ab$ parsed_regex: ab$ str: b
+ac
+ result_expr: - expected_results -
+115_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ac result_expr: - expected_results -
+116_n: OK regex: ab\z parsed_regex: ab\z str: b
+ac result_expr: - expected_results -
+117_n: OK regex: ab$ parsed_regex: ab$ str: b
+ac result_expr: - expected_results -
+118_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ac
+b
+ result_expr: - expected_results -
+119_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ac
+b
+ result_expr: - expected_results -
+120_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ac
+b
+ result_expr: - expected_results -
+121_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ac
+ result_expr: - expected_results -
+122_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ac
+ result_expr: - expected_results -
+123_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ac
+ result_expr: - expected_results -
+124_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ac result_expr: - expected_results -
+125_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ac result_expr: - expected_results -
+126_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ac result_expr: - expected_results -
+127_n: OK regex: ab\Z parsed_regex: ab\Z str: ca
+b
+ result_expr: - expected_results -
+128_n: OK regex: ab\z parsed_regex: ab\z str: ca
+b
+ result_expr: - expected_results -
+129_n: OK regex: ab$ parsed_regex: ab$ str: ca
+b
+ result_expr: - expected_results -
+130_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ca
+ result_expr: - expected_results -
+131_n: OK regex: ab\z parsed_regex: ab\z str: b
+ca
+ result_expr: - expected_results -
+132_n: OK regex: ab$ parsed_regex: ab$ str: b
+ca
+ result_expr: - expected_results -
+133_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ca result_expr: - expected_results -
+134_n: OK regex: ab\z parsed_regex: ab\z str: b
+ca result_expr: - expected_results -
+135_n: OK regex: ab$ parsed_regex: ab$ str: b
+ca result_expr: - expected_results -
+136_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ca
+b
+ result_expr: - expected_results -
+137_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ca
+b
+ result_expr: - expected_results -
+138_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ca
+b
+ result_expr: - expected_results -
+139_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ca
+ result_expr: - expected_results -
+140_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ca
+ result_expr: - expected_results -
+141_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ca
+ result_expr: - expected_results -
+142_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ca result_expr: - expected_results -
+143_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ca result_expr: - expected_results -
+144_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ca result_expr: - expected_results -
+145_n: OK regex: abb\Z parsed_regex: abb\Z str: abb
+b
+ result_expr: - expected_results -
+146_n: OK regex: abb\z parsed_regex: abb\z str: abb
+b
+ result_expr: - expected_results -
+147_n: OK regex: abb$ parsed_regex: abb$ str: abb
+b
+ result_expr: - expected_results -
+148_y: OK regex: abb\Z parsed_regex: abb\Z str: b
+abb
+ result_expr: $-[0] expected_results 2
+149_n: OK regex: abb\z parsed_regex: abb\z str: b
+abb
+ result_expr: - expected_results -
+150_y: OK regex: abb$ parsed_regex: abb$ str: b
+abb
+ result_expr: $-[0] expected_results 2
+151_y: OK regex: abb\Z parsed_regex: abb\Z str: b
+abb result_expr: $-[0] expected_results 2
+152_y: OK regex: abb\z parsed_regex: abb\z str: b
+abb result_expr: $-[0] expected_results 2
+153_y: OK regex: abb$ parsed_regex: abb$ str: b
+abb result_expr: $-[0] expected_results 2
+154_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: abb
+b
+ result_expr: - expected_results -
+155_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: abb
+b
+ result_expr: - expected_results -
+156_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: abb
+b
+ result_expr: $-[0] expected_results 0
+157_y: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+abb
+ result_expr: $-[0] expected_results 2
+158_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+abb
+ result_expr: - expected_results -
+159_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+abb
+ result_expr: $-[0] expected_results 2
+160_y: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+abb result_expr: $-[0] expected_results 2
+161_y: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+abb result_expr: $-[0] expected_results 2
+162_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+abb result_expr: $-[0] expected_results 2
+163_n: OK regex: abb\Z parsed_regex: abb\Z str: ac
+b
+ result_expr: - expected_results -
+164_n: OK regex: abb\z parsed_regex: abb\z str: ac
+b
+ result_expr: - expected_results -
+165_n: OK regex: abb$ parsed_regex: abb$ str: ac
+b
+ result_expr: - expected_results -
+166_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ac
+ result_expr: - expected_results -
+167_n: OK regex: abb\z parsed_regex: abb\z str: b
+ac
+ result_expr: - expected_results -
+168_n: OK regex: abb$ parsed_regex: abb$ str: b
+ac
+ result_expr: - expected_results -
+169_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ac result_expr: - expected_results -
+170_n: OK regex: abb\z parsed_regex: abb\z str: b
+ac result_expr: - expected_results -
+171_n: OK regex: abb$ parsed_regex: abb$ str: b
+ac result_expr: - expected_results -
+172_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: ac
+b
+ result_expr: - expected_results -
+173_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: ac
+b
+ result_expr: - expected_results -
+174_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: ac
+b
+ result_expr: - expected_results -
+175_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ac
+ result_expr: - expected_results -
+176_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ac
+ result_expr: - expected_results -
+177_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ac
+ result_expr: - expected_results -
+178_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ac result_expr: - expected_results -
+179_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ac result_expr: - expected_results -
+180_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ac result_expr: - expected_results -
+181_n: OK regex: abb\Z parsed_regex: abb\Z str: ca
+b
+ result_expr: - expected_results -
+182_n: OK regex: abb\z parsed_regex: abb\z str: ca
+b
+ result_expr: - expected_results -
+183_n: OK regex: abb$ parsed_regex: abb$ str: ca
+b
+ result_expr: - expected_results -
+184_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ca
+ result_expr: - expected_results -
+185_n: OK regex: abb\z parsed_regex: abb\z str: b
+ca
+ result_expr: - expected_results -
+186_n: OK regex: abb$ parsed_regex: abb$ str: b
+ca
+ result_expr: - expected_results -
+187_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ca result_expr: - expected_results -
+188_n: OK regex: abb\z parsed_regex: abb\z str: b
+ca result_expr: - expected_results -
+189_n: OK regex: abb$ parsed_regex: abb$ str: b
+ca result_expr: - expected_results -
+190_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: ca
+b
+ result_expr: - expected_results -
+191_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: ca
+b
+ result_expr: - expected_results -
+192_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: ca
+b
+ result_expr: - expected_results -
+193_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ca
+ result_expr: - expected_results -
+194_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ca
+ result_expr: - expected_results -
+195_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ca
+ result_expr: - expected_results -
+196_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ca result_expr: - expected_results -
+197_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ca result_expr: - expected_results -
+198_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ca result_expr: - expected_results -
+199_y: OK regex: '\Aa$'m parsed_regex: '\Aa$'m str: a
+
+ result_expr: $& expected_results a
+
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_14_multiline_modifier.cpp.output b/regression-tests/test-results/clang-12-c++20/pure2-regex_14_multiline_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_15_group_modifiers.cpp.execution b/regression-tests/test-results/clang-12-c++20/pure2-regex_15_group_modifiers.cpp.execution
new file mode 100644
index 000000000..de92abc48
--- /dev/null
+++ b/regression-tests/test-results/clang-12-c++20/pure2-regex_15_group_modifiers.cpp.execution
@@ -0,0 +1,87 @@
+Running tests_15_group_modifiers:
+01_y: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: ab result_expr: $& expected_results ab
+02_y: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: ab result_expr: $&:$1 expected_results ab:a
+03_y: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: Ab result_expr: $& expected_results Ab
+04_y: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: Ab result_expr: $&:$1 expected_results Ab:A
+05_n: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: aB result_expr: - expected_results -
+06_n: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: aB result_expr: - expected_results -
+07_y: OK regex: (?i:a)b parsed_regex: (?i:a)b str: ab result_expr: $& expected_results ab
+08_y: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: ab result_expr: $&:$1 expected_results ab:a
+09_y: OK regex: (?i:a)b parsed_regex: (?i:a)b str: Ab result_expr: $& expected_results Ab
+10_y: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: Ab result_expr: $&:$1 expected_results Ab:A
+11_n: OK regex: (?i:a)b parsed_regex: (?i:a)b str: aB result_expr: - expected_results -
+12_n: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: aB result_expr: - expected_results -
+13_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: ab result_expr: $& expected_results ab
+14_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: ab result_expr: $&:$1 expected_results ab:a
+15_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: aB result_expr: $& expected_results aB
+16_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: aB result_expr: $&:$1 expected_results aB:a
+17_n: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: Ab result_expr: - expected_results -
+18_n: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: Ab result_expr: - expected_results -
+19_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: aB result_expr: $& expected_results aB
+20_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: aB result_expr: $1 expected_results a
+21_n: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: AB result_expr: - expected_results -
+22_n: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: AB result_expr: - expected_results -
+23_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: ab result_expr: $& expected_results ab
+24_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: ab result_expr: $&:$1 expected_results ab:a
+25_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: aB result_expr: $& expected_results aB
+26_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: aB result_expr: $&:$1 expected_results aB:a
+27_n: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: Ab result_expr: - expected_results -
+28_n: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: Ab result_expr: - expected_results -
+29_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: aB result_expr: $& expected_results aB
+30_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: aB result_expr: $1 expected_results a
+31_n: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: AB result_expr: - expected_results -
+32_n: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: AB result_expr: - expected_results -
+33_n: OK regex: '((?-i:a.))b'i parsed_regex: '((?-i:a.))b'i str: a
+B result_expr: - expected_results -
+34_n: OK regex: '((?-i:a\N))b'i parsed_regex: '((?-i:a\N))b'i str: a
+B result_expr: - expected_results -
+35_y: OK regex: '((?s-i:a.))b'i parsed_regex: '((?s-i:a.))b'i str: a
+B result_expr: $1 expected_results a
+
+36_n: OK regex: '((?s-i:a\N))b'i parsed_regex: '((?s-i:a\N))b'i str: a
+B result_expr: - expected_results -
+37_n: OK regex: '((?s-i:a.))b'i parsed_regex: '((?s-i:a.))b'i str: B
+B result_expr: - expected_results -
+38_n: OK regex: '((?s-i:a\N))b'i parsed_regex: '((?s-i:a\N))b'i str: B
+B result_expr: - expected_results -
+39_y: OK regex: (?i:.[b].) parsed_regex: (?i:.[b].) str: abd result_expr: $& expected_results abd
+40_y: OK regex: (?i:\N[b]\N) parsed_regex: (?i:\N[b]\N) str: abd result_expr: $& expected_results abd
+41_n: OK regex: ^(?:a?b?)*$ parsed_regex: ^(?:a?b?)*$ str: a-- result_expr: - expected_results -
+42_y: OK regex: ((?s)^a(.))((?m)^b$) parsed_regex: ((?s)^a(.))((?m)^b$) str: a
+b
+c
+ result_expr: $1;$2;$3 expected_results a
+;
+;b
+43_y: OK regex: ((?m)^b$) parsed_regex: ((?m)^b$) str: a
+b
+c
+ result_expr: $1 expected_results b
+44_y: OK regex: (?m)^b parsed_regex: (?m)^b str: a
+b
+ result_expr: $& expected_results b
+45_y: OK regex: (?m)^(b) parsed_regex: (?m)^(b) str: a
+b
+ result_expr: $1 expected_results b
+46_y: OK regex: ((?m)^b) parsed_regex: ((?m)^b) str: a
+b
+ result_expr: $1 expected_results b
+47_y: OK regex: \n((?m)^b) parsed_regex: \n((?m)^b) str: a
+b
+ result_expr: $1 expected_results b
+48_n: OK regex: ^b parsed_regex: ^b str: a
+b
+c
+ result_expr: - expected_results -
+49_n: OK regex: ()^b parsed_regex: ()^b str: a
+b
+c
+ result_expr: - expected_results -
+50_y: OK regex: ((?m)^b) parsed_regex: ((?m)^b) str: a
+b
+c
+ result_expr: $1 expected_results b
+51_y: OK Warning: Parsed regex does not match. regex: '(foo)'n parsed_regex: '(?:foo)'n str: foobar result_expr: $&-$1 expected_results foo-
+52_y: OK Warning: Parsed regex does not match. regex: '(?-n)(foo)(?n)(bar)'n parsed_regex: '(?-n)(foo)(?n)(?:bar)'n str: foobar result_expr: $&-$1-$2 expected_results foobar-foo-
+53_y: OK Warning: Parsed regex does not match. regex: '(?-n:(foo)(?n:(bar)))'n parsed_regex: '(?-n:(foo)(?n:(?:bar)))'n str: foobar result_expr: $&-$1-$2 expected_results foobar-foo-
+
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_15_group_modifiers.cpp.output b/regression-tests/test-results/clang-12-c++20/pure2-regex_15_group_modifiers.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_16_perl_syntax_modifier.cpp.execution b/regression-tests/test-results/clang-12-c++20/pure2-regex_16_perl_syntax_modifier.cpp.execution
new file mode 100644
index 000000000..761720007
--- /dev/null
+++ b/regression-tests/test-results/clang-12-c++20/pure2-regex_16_perl_syntax_modifier.cpp.execution
@@ -0,0 +1,35 @@
+Running tests_16_perl_syntax_modifier:
+01_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $& expected_results a
+02_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $-[0] expected_results 0
+03_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $+[0] expected_results 1
+04_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $& expected_results abbb
+05_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $-[0] expected_results 0
+06_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $+[0] expected_results 4
+07_y: OK Warning: Parsed regex does not match. regex: /a\N c/x parsed_regex: /a\Nc/x str: abc result_expr: $& expected_results abc
+08_y: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzc result_expr: $& expected_results axyzc
+09_n: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzd result_expr: - expected_results -
+10_yS: OK regex: /[a b]/x parsed_regex: /[a b]/x str:   result_expr: $& expected_results  
+11_n: OK regex: /[a b]/xx parsed_regex: /[a b]/xx str:   result_expr: - expected_results -
+12_y: OK regex: /[a\ b]/xx parsed_regex: /[a\ b]/xx str:   result_expr: $& expected_results  
+13_n: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: a result_expr: - expected_results -
+14_n: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: b result_expr: - expected_results -
+15_y: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: A result_expr: $& expected_results A
+16_yS: OK regex: /(?x:[a b])/xx parsed_regex: /(?x:[a b])/xx str:   result_expr: $& expected_results  
+17_n: OK regex: /(?xx:[a b])/x parsed_regex: /(?xx:[a b])/x str:   result_expr: - expected_results -
+18_yS: OK regex: /(?x)[a b]/xx parsed_regex: /(?x)[a b]/xx str:   result_expr: $& expected_results  
+19_n: OK regex: /(?xx)[a b]/x parsed_regex: /(?xx)[a b]/x str:   result_expr: - expected_results -
+20_yS: OK regex: /(?-x:[a b])/xx parsed_regex: /(?-x:[a b])/xx str:   result_expr: $& expected_results  
+21_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $& expected_results a
+22_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $-[0] expected_results 0
+23_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $+[0] expected_results 1
+24_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $& expected_results abbb
+25_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $-[0] expected_results 0
+26_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $+[0] expected_results 4
+27_y: OK Warning: Parsed regex does not match. regex: /a\N c/x parsed_regex: /a\Nc/x str: abc result_expr: $& expected_results abc
+28_y: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzc result_expr: $& expected_results axyzc
+29_n: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzd result_expr: - expected_results -
+30_y: OK regex: /[#]/ parsed_regex: /[#]/ str: a#b result_expr: $& expected_results #
+31_y: OK regex: /[#]b/ parsed_regex: /[#]b/ str: a#b result_expr: $& expected_results #b
+32_y: OK regex: /[#]/x parsed_regex: /[#]/x str: a#b result_expr: $& expected_results #
+33_y: OK regex: /[#]b/x parsed_regex: /[#]b/x str: a#b result_expr: $& expected_results #b
+
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_16_perl_syntax_modifier.cpp.output b/regression-tests/test-results/clang-12-c++20/pure2-regex_16_perl_syntax_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_17_comments.cpp.execution b/regression-tests/test-results/clang-12-c++20/pure2-regex_17_comments.cpp.execution
new file mode 100644
index 000000000..17c9a5d55
--- /dev/null
+++ b/regression-tests/test-results/clang-12-c++20/pure2-regex_17_comments.cpp.execution
@@ -0,0 +1,5 @@
+Running tests_17_comments:
+01_y: OK regex: ^a(?#xxx){3}c parsed_regex: ^a(?#xxx){3}c str: aaac result_expr: $& expected_results aaac
+02_y: OK Warning: Parsed regex does not match. regex: '^a (?#xxx) (?#yyy) {3}c'x parsed_regex: '^a(?#xxx)(?#yyy){3}c'x str: aaac result_expr: $& expected_results aaac
+03_y: OK Warning: Parsed regex does not match. regex: 'foo # Match foo'x parsed_regex: 'foo'x str: foobar result_expr: $& expected_results foo
+
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_17_comments.cpp.output b/regression-tests/test-results/clang-12-c++20/pure2-regex_17_comments.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_18_branch_reset.cpp.execution b/regression-tests/test-results/clang-12-c++20/pure2-regex_18_branch_reset.cpp.execution
new file mode 100644
index 000000000..1d088ce31
--- /dev/null
+++ b/regression-tests/test-results/clang-12-c++20/pure2-regex_18_branch_reset.cpp.execution
@@ -0,0 +1,17 @@
+Running tests_18_branch_reset:
+01_y: OK regex: (?|(a)) parsed_regex: (?|(a)) str: a result_expr: $1-$+ expected_results a-a
+02_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: d!o!da result_expr: $1-$2-$3 expected_results !o!-o-a
+03_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: aabc result_expr: $1-$2-$3 expected_results a--c
+04_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: ixyjp result_expr: $1-$2-$3 expected_results x-y-p
+05_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: a result_expr: $1 expected_results a
+06_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: b result_expr: $1 expected_results b
+07_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: c result_expr: $1 expected_results c
+08_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: d result_expr: $1 expected_results d
+09_y: OK regex: (.)(?|(.)(.)x|(.)d)(.) parsed_regex: (.)(?|(.)(.)x|(.)d)(.) str: abcde result_expr: $1-$2-$3-$4-$5- expected_results b-c--e--
+10_y: OK regex: (\N)(?|(\N)(\N)x|(\N)d)(\N) parsed_regex: (\N)(?|(\N)(\N)x|(\N)d)(\N) str: abcde result_expr: $1-$2-$3-$4-$5- expected_results b-c--e--
+11_yM: OK regex: (?|(?<foo>x)) parsed_regex: (?|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+12_yM: OK regex: (?|(?<foo>x)|(?<bar>y)) parsed_regex: (?|(?<foo>x)|(?<bar>y)) str: x result_expr: $+{foo} expected_results x
+13_yM: OK regex: (?|(?<bar>y)|(?<foo>x)) parsed_regex: (?|(?<bar>y)|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+14_yM: OK regex: (?<bar>)(?|(?<foo>x)) parsed_regex: (?<bar>)(?|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+15_y: OK regex: (?|(b)|()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(a)) parsed_regex: (?|(b)|()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(a)) str: a result_expr: $& expected_results a
+
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_18_branch_reset.cpp.output b/regression-tests/test-results/clang-12-c++20/pure2-regex_18_branch_reset.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_19_lookahead.cpp.execution b/regression-tests/test-results/clang-12-c++20/pure2-regex_19_lookahead.cpp.execution
new file mode 100644
index 000000000..7b34914b1
--- /dev/null
+++ b/regression-tests/test-results/clang-12-c++20/pure2-regex_19_lookahead.cpp.execution
@@ -0,0 +1,77 @@
+Running tests_19_lookahead:
+01_y: OK regex: a(?!b). parsed_regex: a(?!b). str: abad result_expr: $& expected_results ad
+02_y: OK regex: (?=)a parsed_regex: (?=)a str: a result_expr: $& expected_results a
+03_y: OK regex: a(?=d). parsed_regex: a(?=d). str: abad result_expr: $& expected_results ad
+04_y: OK regex: a(?=c|d). parsed_regex: a(?=c|d). str: abad result_expr: $& expected_results ad
+05_y: OK regex: ^(?:b|a(?=(.)))*\1 parsed_regex: ^(?:b|a(?=(.)))*\1 str: abc result_expr: $& expected_results ab
+06_y: OK regex: (?=(a+?))(\1ab) parsed_regex: (?=(a+?))(\1ab) str: aaab result_expr: $2 expected_results aab
+07_n: OK regex: ^(?=(a+?))\1ab parsed_regex: ^(?=(a+?))\1ab str: aaab result_expr: - expected_results -
+08_y: OK regex: (?=(a+?))(\1ab) parsed_regex: (?=(a+?))(\1ab) str: aaab result_expr: $2 expected_results aab
+09_n: OK regex: ^(?=(a+?))\1ab parsed_regex: ^(?=(a+?))\1ab str: aaab result_expr: - expected_results -
+10_y: OK regex: (.*)(?=c) parsed_regex: (.*)(?=c) str: abcd result_expr: $1 expected_results ab
+11_yB: OK regex: (.*)(?=c)c parsed_regex: (.*)(?=c)c str: abcd result_expr: $1 expected_results ab
+12_y: OK regex: (.*)(?=b|c) parsed_regex: (.*)(?=b|c) str: abcd result_expr: $1 expected_results ab
+13_y: OK regex: (.*)(?=b|c)c parsed_regex: (.*)(?=b|c)c str: abcd result_expr: $1 expected_results ab
+14_y: OK regex: (.*)(?=c|b) parsed_regex: (.*)(?=c|b) str: abcd result_expr: $1 expected_results ab
+15_y: OK regex: (.*)(?=c|b)c parsed_regex: (.*)(?=c|b)c str: abcd result_expr: $1 expected_results ab
+16_y: OK regex: (.*)(?=[bc]) parsed_regex: (.*)(?=[bc]) str: abcd result_expr: $1 expected_results ab
+17_yB: OK regex: (.*)(?=[bc])c parsed_regex: (.*)(?=[bc])c str: abcd result_expr: $1 expected_results ab
+18_y: OK regex: (.*?)(?=c) parsed_regex: (.*?)(?=c) str: abcd result_expr: $1 expected_results ab
+19_yB: OK regex: (.*?)(?=c)c parsed_regex: (.*?)(?=c)c str: abcd result_expr: $1 expected_results ab
+20_y: OK regex: (.*?)(?=b|c) parsed_regex: (.*?)(?=b|c) str: abcd result_expr: $1 expected_results a
+21_y: OK regex: (.*?)(?=b|c)c parsed_regex: (.*?)(?=b|c)c str: abcd result_expr: $1 expected_results ab
+22_y: OK regex: (.*?)(?=c|b) parsed_regex: (.*?)(?=c|b) str: abcd result_expr: $1 expected_results a
+23_y: OK regex: (.*?)(?=c|b)c parsed_regex: (.*?)(?=c|b)c str: abcd result_expr: $1 expected_results ab
+24_y: OK regex: (.*?)(?=[bc]) parsed_regex: (.*?)(?=[bc]) str: abcd result_expr: $1 expected_results a
+25_yB: OK regex: (.*?)(?=[bc])c parsed_regex: (.*?)(?=[bc])c str: abcd result_expr: $1 expected_results ab
+26_y: OK regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) parsed_regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) str: aaaaaaaa result_expr: $1 expected_results aaaaaaa
+27_y: OK regex: a(?!b(?!c))(..) parsed_regex: a(?!b(?!c))(..) str: abababc result_expr: $1 expected_results bc
+28_y: OK regex: a(?!b(?=a))(..) parsed_regex: a(?!b(?=a))(..) str: abababc result_expr: $1 expected_results bc
+37_y: OK regex: X(\w+)(?=\s)|X(\w+) parsed_regex: X(\w+)(?=\s)|X(\w+) str: Xab result_expr: [$1-$2] expected_results [-ab]
+38_y: OK regex: ^a*(?=b)b parsed_regex: ^a*(?=b)b str: ab result_expr: $& expected_results ab
+39_y: OK regex: '(?!\A)x'm parsed_regex: '(?!\A)x'm str: a
+xb
+ result_expr: - expected_results -
+40_n: OK regex: '^(o)(?!.*\1)'i parsed_regex: '^(o)(?!.*\1)'i str: Oo result_expr: - expected_results -
+41_n: OK regex: .*a(?!(b|cd)*e).*f parsed_regex: .*a(?!(b|cd)*e).*f str: ......abef result_expr: - expected_results -
+42_y: OK regex: ^(a*?)(?!(aa|aaaa)*$) parsed_regex: ^(a*?)(?!(aa|aaaa)*$) str: aaaaaaaaaaaaaaaaaaaa result_expr: $1 expected_results a
+43_y: OK regex: (?!)+?|(.{2,4}) parsed_regex: (?!)+?|(.{2,4}) str: abcde result_expr: $1 expected_results abcd
+44_y: OK regex: ^(a*?)(?!(a{6}|a{5})*$) parsed_regex: ^(a*?)(?!(a{6}|a{5})*$) str: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa result_expr: $+[1] expected_results 12
+45_y: OK regex: a(?!b(?!c(?!d(?!e))))...(.) parsed_regex: a(?!b(?!c(?!d(?!e))))...(.) str: abxabcdxabcde result_expr: $1 expected_results e
+46_y: OK regex: X(?!b+(?!(c+)*(?!(c+)*d))).*X parsed_regex: X(?!b+(?!(c+)*(?!(c+)*d))).*X str: aXbbbbbbbcccccccccccccaaaX result_expr: - expected_results -
+47_y: OK regex: ((?s).)c(?!.) parsed_regex: ((?s).)c(?!.) str: a
+b
+c
+ result_expr: $1 expected_results 
+
+48_y: OK regex: ((?s).)c(?!.) parsed_regex: ((?s).)c(?!.) str: a
+b
+c
+ result_expr: $1:$& expected_results 
+:
+c
+49_y: OK regex: ((?s)b.)c(?!.) parsed_regex: ((?s)b.)c(?!.) str: a
+b
+c
+ result_expr: $1 expected_results b
+
+50_y: OK regex: ((?s)b.)c(?!.) parsed_regex: ((?s)b.)c(?!.) str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+51_y: OK regex: ((?s)b.)c(?!\N) parsed_regex: ((?s)b.)c(?!\N) str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+52_y: OK regex: '(b.)c(?!\N)'s parsed_regex: '(b.)c(?!\N)'s str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+53_n: OK regex: a*(?!) parsed_regex: a*(?!) str: aaaab result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/clang-12-c++20/pure2-regex_19_lookahead.cpp.output b/regression-tests/test-results/clang-12-c++20/pure2-regex_19_lookahead.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_01_char_matcher.cpp.execution b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_01_char_matcher.cpp.execution
new file mode 100644
index 000000000..af124736e
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_01_char_matcher.cpp.execution
@@ -0,0 +1,14 @@
+Running tests_01_char_matcher:
+01_y: OK regex: abc parsed_regex: abc str: abc result_expr: $& expected_results abc
+02_y: OK regex: abc parsed_regex: abc str: abc result_expr: $-[0] expected_results 0
+03_y: OK regex: abc parsed_regex: abc str: abc result_expr: $+[0] expected_results 3
+04_n: OK regex: abc parsed_regex: abc str: xbc result_expr: - expected_results -
+05_n: OK regex: abc parsed_regex: abc str: axc result_expr: - expected_results -
+06_n: OK regex: abc parsed_regex: abc str: abx result_expr: - expected_results -
+07_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $& expected_results abc
+08_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $-[0] expected_results 1
+09_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $+[0] expected_results 4
+10_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $& expected_results abc
+11_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $-[0] expected_results 2
+12_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $+[0] expected_results 5
+
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_01_char_matcher.cpp.output b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_01_char_matcher.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_02_ranges.cpp.execution b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_02_ranges.cpp.execution
new file mode 100644
index 000000000..dc0b36002
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_02_ranges.cpp.execution
@@ -0,0 +1,42 @@
+Running tests_02_ranges:
+01_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $& expected_results abc
+02_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $-[0] expected_results 0
+03_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $+[0] expected_results 3
+04_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $& expected_results abc
+05_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $-[0] expected_results 0
+06_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $+[0] expected_results 3
+07_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $& expected_results abbc
+08_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $-[0] expected_results 0
+09_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $+[0] expected_results 4
+10_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $& expected_results abbbbc
+11_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $-[0] expected_results 0
+12_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $+[0] expected_results 6
+13_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $& expected_results abbbbc
+14_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $-[0] expected_results 0
+15_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $+[0] expected_results 6
+16_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $& expected_results abbc
+17_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $-[0] expected_results 0
+18_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $+[0] expected_results 4
+19_n: OK regex: ab+bc parsed_regex: ab+bc str: abc result_expr: - expected_results -
+20_n: OK regex: ab+bc parsed_regex: ab+bc str: abq result_expr: - expected_results -
+21_n: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abq result_expr: - expected_results -
+22_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $& expected_results abbbbc
+23_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $-[0] expected_results 0
+24_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $+[0] expected_results 6
+25_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $& expected_results abbbbc
+26_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $-[0] expected_results 0
+27_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $+[0] expected_results 6
+28_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $& expected_results abbbbc
+29_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $-[0] expected_results 0
+30_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $+[0] expected_results 6
+31_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $& expected_results abbbbc
+32_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $-[0] expected_results 0
+33_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $+[0] expected_results 6
+34_n: OK regex: ab{4,5}bc parsed_regex: ab{4,5}bc str: abbbbc result_expr: - expected_results -
+35_y: OK regex: ab?bc parsed_regex: ab?bc str: abbc result_expr: $& expected_results abbc
+36_y: OK regex: ab?bc parsed_regex: ab?bc str: abc result_expr: $& expected_results abc
+37_y: OK regex: ab{0,1}bc parsed_regex: ab{0,1}bc str: abc result_expr: $& expected_results abc
+38_n: OK regex: ab?bc parsed_regex: ab?bc str: abbbbc result_expr: - expected_results -
+39_y: OK regex: ab?c parsed_regex: ab?c str: abc result_expr: $& expected_results abc
+40_y: OK regex: ab{0,1}c parsed_regex: ab{0,1}c str: abc result_expr: $& expected_results abc
+
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_02_ranges.cpp.output b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_02_ranges.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_03_wildcard.cpp.execution b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_03_wildcard.cpp.execution
new file mode 100644
index 000000000..f3f0ea9cc
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_03_wildcard.cpp.execution
@@ -0,0 +1,22 @@
+Running tests_03_wildcard:
+01_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $& expected_results a
+02_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $-[0] expected_results 0
+03_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $+[0] expected_results 1
+04_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $& expected_results abbb
+05_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $-[0] expected_results 0
+06_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+07_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $& expected_results a
+08_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $-[0] expected_results 0
+09_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $+[0] expected_results 1
+10_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $& expected_results abbb
+11_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $-[0] expected_results 0
+12_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+13_y: OK Warning: Parsed regex does not match. regex: \N{ 3 , 4 } parsed_regex: \N{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+14_y: OK regex: a.c parsed_regex: a.c str: abc result_expr: $& expected_results abc
+15_y: OK regex: a.c parsed_regex: a.c str: axc result_expr: $& expected_results axc
+16_y: OK regex: a\Nc parsed_regex: a\Nc str: abc result_expr: $& expected_results abc
+17_y: OK regex: a.*c parsed_regex: a.*c str: axyzc result_expr: $& expected_results axyzc
+18_y: OK regex: a\N*c parsed_regex: a\N*c str: axyzc result_expr: $& expected_results axyzc
+19_n: OK regex: a.*c parsed_regex: a.*c str: axyzd result_expr: - expected_results -
+20_n: OK regex: a\N*c parsed_regex: a\N*c str: axyzd result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_03_wildcard.cpp.output b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_03_wildcard.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_04_start_end.cpp.execution b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_04_start_end.cpp.execution
new file mode 100644
index 000000000..6fef36434
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_04_start_end.cpp.execution
@@ -0,0 +1,11 @@
+Running tests_04_start_end:
+01_y: OK regex: ^abc$ parsed_regex: ^abc$ str: abc result_expr: $& expected_results abc
+02_n: OK regex: ^abc$ parsed_regex: ^abc$ str: abcc result_expr: - expected_results -
+03_y: OK regex: ^abc parsed_regex: ^abc str: abcc result_expr: $& expected_results abc
+04_n: OK regex: ^abc$ parsed_regex: ^abc$ str: aabc result_expr: - expected_results -
+05_y: OK regex: abc$ parsed_regex: abc$ str: aabc result_expr: $& expected_results abc
+06_n: OK regex: abc$ parsed_regex: abc$ str: aabcd result_expr: - expected_results -
+07_y: OK regex: ^ parsed_regex: ^ str: abc result_expr: $& expected_results 
+08_y: OK regex: $ parsed_regex: $ str: abc result_expr: $& expected_results 
+09_n: OK regex: $b parsed_regex: $b str: b result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_04_start_end.cpp.output b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_04_start_end.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_05_classes.cpp.execution b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_05_classes.cpp.execution
new file mode 100644
index 000000000..306bf3395
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_05_classes.cpp.execution
@@ -0,0 +1,21 @@
+Running tests_05_classes:
+01_n: OK regex: a[bc]d parsed_regex: a[bc]d str: abc result_expr: - expected_results -
+02_y: OK regex: a[bc]d parsed_regex: a[bc]d str: abd result_expr: $& expected_results abd
+03_y: OK regex: a[b]d parsed_regex: a[b]d str: abd result_expr: $& expected_results abd
+04_y: OK regex: [a][b][d] parsed_regex: [a][b][d] str: abd result_expr: $& expected_results abd
+05_y: OK regex: .[b]. parsed_regex: .[b]. str: abd result_expr: $& expected_results abd
+06_n: OK regex: .[b]. parsed_regex: .[b]. str: aBd result_expr: - expected_results -
+07_n: OK regex: a[b-d]e parsed_regex: a[b-d]e str: abd result_expr: - expected_results -
+08_y: OK regex: a[b-d]e parsed_regex: a[b-d]e str: ace result_expr: $& expected_results ace
+09_y: OK regex: a[b-d] parsed_regex: a[b-d] str: aac result_expr: $& expected_results ac
+10_y: OK regex: a[-b] parsed_regex: a[-b] str: a- result_expr: $& expected_results a-
+11_y: OK regex: a[b-] parsed_regex: a[b-] str: a- result_expr: $& expected_results a-
+12_y: OK regex: a] parsed_regex: a] str: a] result_expr: $& expected_results a]
+13_y: OK regex: a[]]b parsed_regex: a[]]b str: a]b result_expr: $& expected_results a]b
+14_y: OK regex: a[^bc]d parsed_regex: a[^bc]d str: aed result_expr: $& expected_results aed
+15_n: OK regex: a[^bc]d parsed_regex: a[^bc]d str: abd result_expr: - expected_results -
+16_y: OK regex: a[^-b]c parsed_regex: a[^-b]c str: adc result_expr: $& expected_results adc
+17_n: OK regex: a[^-b]c parsed_regex: a[^-b]c str: a-c result_expr: - expected_results -
+18_n: OK regex: a[^]b]c parsed_regex: a[^]b]c str: a]c result_expr: - expected_results -
+19_y: OK regex: a[^]b]c parsed_regex: a[^]b]c str: adc result_expr: $& expected_results adc
+
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_05_classes.cpp.output b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_05_classes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_06_boundaries.cpp.execution b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_06_boundaries.cpp.execution
new file mode 100644
index 000000000..420a4c587
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_06_boundaries.cpp.execution
@@ -0,0 +1,19 @@
+Running tests_06_boundaries:
+01_y: OK regex: \ba\b parsed_regex: \ba\b str: a- result_expr: - expected_results -
+02_y: OK regex: \ba\b parsed_regex: \ba\b str: -a result_expr: - expected_results -
+03_y: OK regex: \ba\b parsed_regex: \ba\b str: -a- result_expr: - expected_results -
+04_n: OK regex: \by\b parsed_regex: \by\b str: xy result_expr: - expected_results -
+05_n: OK regex: \by\b parsed_regex: \by\b str: yz result_expr: - expected_results -
+06_n: OK regex: \by\b parsed_regex: \by\b str: xyz result_expr: - expected_results -
+07_n: OK regex: \Ba\B parsed_regex: \Ba\B str: a- result_expr: - expected_results -
+08_n: OK regex: \Ba\B parsed_regex: \Ba\B str: -a result_expr: - expected_results -
+09_n: OK regex: \Ba\B parsed_regex: \Ba\B str: -a- result_expr: - expected_results -
+10_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: - expected_results -
+11_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: $-[0] expected_results 1
+12_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: $+[0] expected_results 2
+13_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: - expected_results -
+14_y: OK regex: \by\B parsed_regex: \by\B str: yz result_expr: - expected_results -
+15_y: OK regex: \By\B parsed_regex: \By\B str: xyz result_expr: - expected_results -
+16_n: OK regex: \b parsed_regex: \b str:  result_expr: - expected_results -
+17_y: OK regex: \B parsed_regex: \B str:  result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_06_boundaries.cpp.output b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_06_boundaries.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_07_short_classes.cpp.execution b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_07_short_classes.cpp.execution
new file mode 100644
index 000000000..519c05f92
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_07_short_classes.cpp.execution
@@ -0,0 +1,26 @@
+Running tests_07_short_classes:
+01_y: OK regex: \w parsed_regex: \w str: a result_expr: - expected_results -
+02_n: OK regex: \w parsed_regex: \w str: - result_expr: - expected_results -
+03_n: OK regex: \W parsed_regex: \W str: a result_expr: - expected_results -
+04_y: OK regex: \W parsed_regex: \W str: - result_expr: - expected_results -
+05_y: OK regex: a\sb parsed_regex: a\sb str: a b result_expr: - expected_results -
+06_n: OK regex: a\sb parsed_regex: a\sb str: a-b result_expr: - expected_results -
+07_n: OK regex: a\Sb parsed_regex: a\Sb str: a b result_expr: - expected_results -
+08_y: OK regex: a\Sb parsed_regex: a\Sb str: a-b result_expr: - expected_results -
+09_y: OK regex: \d parsed_regex: \d str: 1 result_expr: - expected_results -
+10_n: OK regex: \d parsed_regex: \d str: - result_expr: - expected_results -
+11_n: OK regex: \D parsed_regex: \D str: 1 result_expr: - expected_results -
+12_y: OK regex: \D parsed_regex: \D str: - result_expr: - expected_results -
+13_y: OK regex: [\w] parsed_regex: [\w] str: a result_expr: - expected_results -
+14_n: OK regex: [\w] parsed_regex: [\w] str: - result_expr: - expected_results -
+15_n: OK regex: [\W] parsed_regex: [\W] str: a result_expr: - expected_results -
+16_y: OK regex: [\W] parsed_regex: [\W] str: - result_expr: - expected_results -
+17_y: OK regex: a[\s]b parsed_regex: a[\s]b str: a b result_expr: - expected_results -
+18_n: OK regex: a[\s]b parsed_regex: a[\s]b str: a-b result_expr: - expected_results -
+19_n: OK regex: a[\S]b parsed_regex: a[\S]b str: a b result_expr: - expected_results -
+20_y: OK regex: a[\S]b parsed_regex: a[\S]b str: a-b result_expr: - expected_results -
+21_y: OK regex: [\d] parsed_regex: [\d] str: 1 result_expr: - expected_results -
+22_n: OK regex: [\d] parsed_regex: [\d] str: - result_expr: - expected_results -
+23_n: OK regex: [\D] parsed_regex: [\D] str: 1 result_expr: - expected_results -
+24_y: OK regex: [\D] parsed_regex: [\D] str: - result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_07_short_classes.cpp.output b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_07_short_classes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_08_alternatives.cpp.execution b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_08_alternatives.cpp.execution
new file mode 100644
index 000000000..c12fd2afe
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_08_alternatives.cpp.execution
@@ -0,0 +1,4 @@
+Running tests_08_alternatives:
+01_y: OK regex: ab|cd parsed_regex: ab|cd str: abc result_expr: $& expected_results ab
+02_y: OK regex: ab|cd parsed_regex: ab|cd str: abcd result_expr: $& expected_results ab
+
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_08_alternatives.cpp.output b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_08_alternatives.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_09_groups.cpp.execution b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_09_groups.cpp.execution
new file mode 100644
index 000000000..05df860f9
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_09_groups.cpp.execution
@@ -0,0 +1,13 @@
+Running tests_09_groups:
+01_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $&-$1 expected_results ef-
+02_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $-[0] expected_results 1
+03_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $+[0] expected_results 3
+04_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $-[1] expected_results 1
+05_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $+[1] expected_results 1
+06_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $&-$1-$2 expected_results a-a-a
+07_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $-[0]-$-[1]-$-[2] expected_results 0-0-0
+08_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $+[0]-$+[1]-$+[2] expected_results 1-1-1
+09_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $&-$1-$2 expected_results abc-a-c
+10_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $-[0]-$-[1]-$-[2] expected_results 0-0-2
+11_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $+[0]-$+[1]-$+[2] expected_results 3-1-3
+
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_09_groups.cpp.output b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_09_groups.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_10_escapes.cpp.execution b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_10_escapes.cpp.execution
new file mode 100644
index 000000000..fe6e6efc9
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_10_escapes.cpp.execution
@@ -0,0 +1,39 @@
+Running tests_10_escapes:
+01_y: OK regex: a\(b parsed_regex: a\(b str: a(b result_expr: $&-$1 expected_results a(b-
+02_y: OK regex: a\(*b parsed_regex: a\(*b str: ab result_expr: $& expected_results ab
+03_y: OK regex: a\(*b parsed_regex: a\(*b str: a((b result_expr: $& expected_results a((b
+04_y: OK regex: a\\b parsed_regex: a\\b str: a\b result_expr: $& expected_results a\b
+05_y: OK regex: foo(\h+)bar parsed_regex: foo(\h+)bar str: foo	bar result_expr: $1 expected_results 	
+06_y: OK regex: (\H+)(\h) parsed_regex: (\H+)(\h) str: foo	bar result_expr: $1-$2 expected_results foo-	
+07_y: OK regex: (\h+)(\H) parsed_regex: (\h+)(\H) str: foo	bar result_expr: $1-$2 expected_results 	-b
+08_y: OK regex: foo(\h)bar parsed_regex: foo(\h)bar str: foo	bar result_expr: $1 expected_results 	
+09_y: OK regex: (\H)(\h) parsed_regex: (\H)(\h) str: foo	bar result_expr: $1-$2 expected_results o-	
+10_y: OK regex: (\h)(\H) parsed_regex: (\h)(\H) str: foo	bar result_expr: $1-$2 expected_results 	-b
+11_y: OK regex: foo(\v+)bar parsed_regex: foo(\v+)bar str: foo
+
+
+bar result_expr: $1 expected_results 
+
+
+
+12_y: OK regex: (\V+)(\v) parsed_regex: (\V+)(\v) str: foo
+
+
+bar result_expr: $1-$2 expected_results foo-
+13_y: OK regex: (\v+)(\V) parsed_regex: (\v+)(\V) str: foo
+
+
+bar result_expr: $1-$2 expected_results 
+
+
+-b
+14_y: OK regex: foo(\v)bar parsed_regex: foo(\v)bar str: foo
bar result_expr: $1 expected_results 
+15_y: OK regex: (\V)(\v) parsed_regex: (\V)(\v) str: foo
bar result_expr: $1-$2 expected_results o-
+16_y: OK regex: (\v)(\V) parsed_regex: (\v)(\V) str: foo
bar result_expr: $1-$2 expected_results 
-b
+17_y: OK regex: foo\t\n\r\f\a\ebar parsed_regex: foo\t\n\r\f\a\ebar str: foo	
+
bar result_expr: $& expected_results foo	
+
bar
+18_y: OK regex: foo\Kbar parsed_regex: foo\Kbar str: foobar result_expr: $& expected_results bar
+19_y: OK regex: \x41\x42 parsed_regex: \x41\x42 str: AB result_expr: $& expected_results AB
+20_y: OK regex: \101\o{102} parsed_regex: \101\o{102} str: AB result_expr: $& expected_results AB
+
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_10_escapes.cpp.output b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_10_escapes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_11_group_references.cpp.execution b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_11_group_references.cpp.execution
new file mode 100644
index 000000000..724d0085a
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_11_group_references.cpp.execution
@@ -0,0 +1,26 @@
+Running tests_11_group_references:
+01_y: OK regex: (foo)(\g-2) parsed_regex: (foo)(\g-2) str: foofoo result_expr: $1-$2 expected_results foo-foo
+02_y: OK regex: (foo)(\g-2)(foo)(\g-2) parsed_regex: (foo)(\g-2)(foo)(\g-2) str: foofoofoofoo result_expr: $1-$2-$3-$4 expected_results foo-foo-foo-foo
+03_y: OK regex: (([abc]+) \g-1)(([abc]+) \g{-1}) parsed_regex: (([abc]+) \g-1)(([abc]+) \g{-1}) str: abc abccba cba result_expr: $2-$4 expected_results abc-cba
+04_y: OK regex: (a)(b)(c)\g1\g2\g3 parsed_regex: (a)(b)(c)\g1\g2\g3 str: abcabc result_expr: $1$2$3 expected_results abc
+05_y: OK regex: /(?'n'foo) \g{n}/ parsed_regex: /(?'n'foo) \g{n}/ str: ..foo foo.. result_expr: $1 expected_results foo
+06_y: OK regex: /(?'n'foo) \g{ n }/ parsed_regex: /(?'n'foo) \g{ n }/ str: ..foo foo.. result_expr: $1 expected_results foo
+07_yM: OK regex: /(?'n'foo) \g{n}/ parsed_regex: /(?'n'foo) \g{n}/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+08_y: OK regex: /(?<n>foo) \g{n}/ parsed_regex: /(?<n>foo) \g{n}/ str: ..foo foo.. result_expr: $1 expected_results foo
+09_yM: OK regex: /(?<n>foo) \g{n}/ parsed_regex: /(?<n>foo) \g{n}/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+10_y: OK regex: /(?<as>as) (\w+) \g{as} (\w+)/ parsed_regex: /(?<as>as) (\w+) \g{as} (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+11_y: OK regex: /(?'n'foo) \k<n>/ parsed_regex: /(?'n'foo) \k<n>/ str: ..foo foo.. result_expr: $1 expected_results foo
+12_yM: OK regex: /(?'n'foo) \k<n>/ parsed_regex: /(?'n'foo) \k<n>/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+13_y: OK regex: /(?<n>foo) \k'n'/ parsed_regex: /(?<n>foo) \k'n'/ str: ..foo foo.. result_expr: $1 expected_results foo
+14_yM: OK regex: /(?<n>foo) \k'n'/ parsed_regex: /(?<n>foo) \k'n'/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+15_yM: OK regex: /(?'a1'foo) \k'a1'/ parsed_regex: /(?'a1'foo) \k'a1'/ str: ..foo foo.. result_expr: $+{a1} expected_results foo
+16_yM: OK regex: /(?<a1>foo) \k<a1>/ parsed_regex: /(?<a1>foo) \k<a1>/ str: ..foo foo.. result_expr: $+{a1} expected_results foo
+17_yM: OK regex: /(?'_'foo) \k'_'/ parsed_regex: /(?'_'foo) \k'_'/ str: ..foo foo.. result_expr: $+{_} expected_results foo
+18_yM: OK regex: /(?<_>foo) \k<_>/ parsed_regex: /(?<_>foo) \k<_>/ str: ..foo foo.. result_expr: $+{_} expected_results foo
+19_yM: OK regex: /(?'_0_'foo) \k'_0_'/ parsed_regex: /(?'_0_'foo) \k'_0_'/ str: ..foo foo.. result_expr: $+{_0_} expected_results foo
+20_yM: OK regex: /(?<_0_>foo) \k<_0_>/ parsed_regex: /(?<_0_>foo) \k<_0_>/ str: ..foo foo.. result_expr: $+{_0_} expected_results foo
+21_y: OK regex: /(?<as>as) (\w+) \k<as> (\w+)/ parsed_regex: /(?<as>as) (\w+) \k<as> (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+22_y: OK regex: /(?<as>as) (\w+) \k{as} (\w+)/ parsed_regex: /(?<as>as) (\w+) \k{as} (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+23_y: OK regex: /(?<as>as) (\w+) \k'as' (\w+)/ parsed_regex: /(?<as>as) (\w+) \k'as' (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+24_y: OK regex: /(?<as>as) (\w+) \k{ as } (\w+)/ parsed_regex: /(?<as>as) (\w+) \k{ as } (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_11_group_references.cpp.output b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_11_group_references.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_12_case_insensitive.cpp.execution b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_12_case_insensitive.cpp.execution
new file mode 100644
index 000000000..4939deb24
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_12_case_insensitive.cpp.execution
@@ -0,0 +1,121 @@
+Running tests_12_case_insensitive:
+01_y: OK regex: 'abc'i parsed_regex: 'abc'i str: ABC result_expr: $& expected_results ABC
+02_n: OK regex: 'abc'i parsed_regex: 'abc'i str: XBC result_expr: - expected_results -
+03_n: OK regex: 'abc'i parsed_regex: 'abc'i str: AXC result_expr: - expected_results -
+04_n: OK regex: 'abc'i parsed_regex: 'abc'i str: ABX result_expr: - expected_results -
+05_y: OK regex: 'abc'i parsed_regex: 'abc'i str: XABCY result_expr: $& expected_results ABC
+06_y: OK regex: 'abc'i parsed_regex: 'abc'i str: ABABC result_expr: $& expected_results ABC
+07_y: OK regex: 'ab*c'i parsed_regex: 'ab*c'i str: ABC result_expr: $& expected_results ABC
+08_y: OK regex: 'ab*bc'i parsed_regex: 'ab*bc'i str: ABC result_expr: $& expected_results ABC
+09_y: OK regex: 'ab*bc'i parsed_regex: 'ab*bc'i str: ABBC result_expr: $& expected_results ABBC
+10_y: OK regex: 'ab*?bc'i parsed_regex: 'ab*?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+11_y: OK regex: 'ab{0,}?bc'i parsed_regex: 'ab{0,}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+12_y: OK regex: 'ab+?bc'i parsed_regex: 'ab+?bc'i str: ABBC result_expr: $& expected_results ABBC
+13_n: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABC result_expr: - expected_results -
+14_n: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABQ result_expr: - expected_results -
+15_n: OK regex: 'ab{1,}bc'i parsed_regex: 'ab{1,}bc'i str: ABQ result_expr: - expected_results -
+16_y: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+17_y: OK regex: 'ab{1,}?bc'i parsed_regex: 'ab{1,}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+18_y: OK regex: 'ab{1,3}?bc'i parsed_regex: 'ab{1,3}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+19_y: OK regex: 'ab{3,4}?bc'i parsed_regex: 'ab{3,4}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+20_n: OK regex: 'ab{4,5}?bc'i parsed_regex: 'ab{4,5}?bc'i str: ABBBBC result_expr: - expected_results -
+21_y: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABBC result_expr: $& expected_results ABBC
+22_y: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABC result_expr: $& expected_results ABC
+23_y: OK regex: 'ab{0,1}?bc'i parsed_regex: 'ab{0,1}?bc'i str: ABC result_expr: $& expected_results ABC
+24_n: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABBBBC result_expr: - expected_results -
+25_y: OK regex: 'ab??c'i parsed_regex: 'ab??c'i str: ABC result_expr: $& expected_results ABC
+26_y: OK regex: 'ab{0,1}?c'i parsed_regex: 'ab{0,1}?c'i str: ABC result_expr: $& expected_results ABC
+27_y: OK regex: '^abc$'i parsed_regex: '^abc$'i str: ABC result_expr: $& expected_results ABC
+28_n: OK regex: '^abc$'i parsed_regex: '^abc$'i str: ABCC result_expr: - expected_results -
+29_y: OK regex: '^abc'i parsed_regex: '^abc'i str: ABCC result_expr: $& expected_results ABC
+30_n: OK regex: '^abc$'i parsed_regex: '^abc$'i str: AABC result_expr: - expected_results -
+31_y: OK regex: 'abc$'i parsed_regex: 'abc$'i str: AABC result_expr: $& expected_results ABC
+32_y: OK regex: '^'i parsed_regex: '^'i str: ABC result_expr: $& expected_results 
+33_y: OK regex: '$'i parsed_regex: '$'i str: ABC result_expr: $& expected_results 
+34_y: OK regex: 'a.c'i parsed_regex: 'a.c'i str: ABC result_expr: $& expected_results ABC
+35_y: OK regex: 'a.c'i parsed_regex: 'a.c'i str: AXC result_expr: $& expected_results AXC
+36_y: OK regex: 'a\Nc'i parsed_regex: 'a\Nc'i str: ABC result_expr: $& expected_results ABC
+37_y: OK regex: 'a.*?c'i parsed_regex: 'a.*?c'i str: AXYZC result_expr: $& expected_results AXYZC
+38_n: OK regex: 'a.*c'i parsed_regex: 'a.*c'i str: AXYZD result_expr: - expected_results -
+39_n: OK regex: 'a[bc]d'i parsed_regex: 'a[bc]d'i str: ABC result_expr: - expected_results -
+40_y: OK regex: 'a[bc]d'i parsed_regex: 'a[bc]d'i str: ABD result_expr: $& expected_results ABD
+41_n: OK regex: 'a[b-d]e'i parsed_regex: 'a[b-d]e'i str: ABD result_expr: - expected_results -
+42_y: OK regex: 'a[b-d]e'i parsed_regex: 'a[b-d]e'i str: ACE result_expr: $& expected_results ACE
+43_y: OK regex: 'a[b-d]'i parsed_regex: 'a[b-d]'i str: AAC result_expr: $& expected_results AC
+44_y: OK regex: 'a[-b]'i parsed_regex: 'a[-b]'i str: A- result_expr: $& expected_results A-
+45_y: OK regex: 'a[b-]'i parsed_regex: 'a[b-]'i str: A- result_expr: $& expected_results A-
+46_y: OK regex: 'a]'i parsed_regex: 'a]'i str: A] result_expr: $& expected_results A]
+47_y: OK regex: 'a[]]b'i parsed_regex: 'a[]]b'i str: A]B result_expr: $& expected_results A]B
+48_y: OK regex: 'a[^bc]d'i parsed_regex: 'a[^bc]d'i str: AED result_expr: $& expected_results AED
+49_n: OK regex: 'a[^bc]d'i parsed_regex: 'a[^bc]d'i str: ABD result_expr: - expected_results -
+50_y: OK regex: 'a[^-b]c'i parsed_regex: 'a[^-b]c'i str: ADC result_expr: $& expected_results ADC
+51_n: OK regex: 'a[^-b]c'i parsed_regex: 'a[^-b]c'i str: A-C result_expr: - expected_results -
+52_n: OK regex: 'a[^]b]c'i parsed_regex: 'a[^]b]c'i str: A]C result_expr: - expected_results -
+53_y: OK regex: 'a[^]b]c'i parsed_regex: 'a[^]b]c'i str: ADC result_expr: $& expected_results ADC
+54_y: OK regex: 'ab|cd'i parsed_regex: 'ab|cd'i str: ABC result_expr: $& expected_results AB
+55_y: OK regex: 'ab|cd'i parsed_regex: 'ab|cd'i str: ABCD result_expr: $& expected_results AB
+56_y: OK regex: '()ef'i parsed_regex: '()ef'i str: DEF result_expr: $&-$1 expected_results EF-
+57_n: OK regex: '$b'i parsed_regex: '$b'i str: B result_expr: - expected_results -
+58_y: OK regex: 'a\(b'i parsed_regex: 'a\(b'i str: A(B result_expr: $&-$1 expected_results A(B-
+59_y: OK regex: 'a\(*b'i parsed_regex: 'a\(*b'i str: AB result_expr: $& expected_results AB
+60_y: OK regex: 'a\(*b'i parsed_regex: 'a\(*b'i str: A((B result_expr: $& expected_results A((B
+61_y: OK regex: 'a\\b'i parsed_regex: 'a\\b'i str: A\B result_expr: $& expected_results A\B
+62_y: OK regex: '((a))'i parsed_regex: '((a))'i str: ABC result_expr: $&-$1-$2 expected_results A-A-A
+63_y: OK regex: '(a)b(c)'i parsed_regex: '(a)b(c)'i str: ABC result_expr: $&-$1-$2 expected_results ABC-A-C
+64_y: OK regex: 'a+b+c'i parsed_regex: 'a+b+c'i str: AABBABC result_expr: $& expected_results ABC
+65_y: OK regex: 'a{1,}b{1,}c'i parsed_regex: 'a{1,}b{1,}c'i str: AABBABC result_expr: $& expected_results ABC
+66_y: OK regex: 'a.+?c'i parsed_regex: 'a.+?c'i str: ABCABC result_expr: $& expected_results ABC
+67_y: OK regex: 'a.*?c'i parsed_regex: 'a.*?c'i str: ABCABC result_expr: $& expected_results ABC
+68_y: OK regex: 'a.{0,5}?c'i parsed_regex: 'a.{0,5}?c'i str: ABCABC result_expr: $& expected_results ABC
+69_y: OK regex: '(a+|b)*'i parsed_regex: '(a+|b)*'i str: AB result_expr: $&-$1 expected_results AB-B
+70_y: OK regex: '(a+|b){0,}'i parsed_regex: '(a+|b){0,}'i str: AB result_expr: $&-$1 expected_results AB-B
+71_y: OK regex: '(a+|b)+'i parsed_regex: '(a+|b)+'i str: AB result_expr: $&-$1 expected_results AB-B
+72_y: OK regex: '(a+|b){1,}'i parsed_regex: '(a+|b){1,}'i str: AB result_expr: $&-$1 expected_results AB-B
+73_y: OK regex: '(a+|b)?'i parsed_regex: '(a+|b)?'i str: AB result_expr: $&-$1 expected_results A-A
+74_y: OK regex: '(a+|b){0,1}'i parsed_regex: '(a+|b){0,1}'i str: AB result_expr: $&-$1 expected_results A-A
+75_y: OK regex: '(a+|b){0,1}?'i parsed_regex: '(a+|b){0,1}?'i str: AB result_expr: $&-$1 expected_results -
+76_y: OK regex: '[^ab]*'i parsed_regex: '[^ab]*'i str: CDE result_expr: $& expected_results CDE
+77_n: OK regex: 'abc'i parsed_regex: 'abc'i str:  result_expr: - expected_results -
+78_y: OK regex: 'a*'i parsed_regex: 'a*'i str:  result_expr: $& expected_results 
+79_y: OK regex: '([abc])*d'i parsed_regex: '([abc])*d'i str: ABBBCD result_expr: $&-$1 expected_results ABBBCD-C
+80_y: OK regex: '([abc])*bcd'i parsed_regex: '([abc])*bcd'i str: ABCD result_expr: $&-$1 expected_results ABCD-A
+81_y: OK regex: 'a|b|c|d|e'i parsed_regex: 'a|b|c|d|e'i str: E result_expr: $& expected_results E
+82_y: OK regex: '(a|b|c|d|e)f'i parsed_regex: '(a|b|c|d|e)f'i str: EF result_expr: $&-$1 expected_results EF-E
+83_y: OK regex: 'abcd*efg'i parsed_regex: 'abcd*efg'i str: ABCDEFG result_expr: $& expected_results ABCDEFG
+84_y: OK regex: 'ab*'i parsed_regex: 'ab*'i str: XABYABBBZ result_expr: $& expected_results AB
+85_y: OK regex: 'ab*'i parsed_regex: 'ab*'i str: XAYABBBZ result_expr: $& expected_results A
+86_y: OK regex: '(ab|cd)e'i parsed_regex: '(ab|cd)e'i str: ABCDE result_expr: $&-$1 expected_results CDE-CD
+87_y: OK regex: '[abhgefdc]ij'i parsed_regex: '[abhgefdc]ij'i str: HIJ result_expr: $& expected_results HIJ
+88_n: OK regex: '^(ab|cd)e'i parsed_regex: '^(ab|cd)e'i str: ABCDE result_expr: x$1y expected_results XY
+89_y: OK regex: '(abc|)ef'i parsed_regex: '(abc|)ef'i str: ABCDEF result_expr: $&-$1 expected_results EF-
+90_y: OK regex: '(a|b)c*d'i parsed_regex: '(a|b)c*d'i str: ABCD result_expr: $&-$1 expected_results BCD-B
+91_y: OK regex: '(ab|ab*)bc'i parsed_regex: '(ab|ab*)bc'i str: ABC result_expr: $&-$1 expected_results ABC-A
+92_y: OK regex: 'a([bc]*)c*'i parsed_regex: 'a([bc]*)c*'i str: ABC result_expr: $&-$1 expected_results ABC-BC
+93_y: OK regex: 'a([bc]*)(c*d)'i parsed_regex: 'a([bc]*)(c*d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-BC-D
+94_y: OK regex: 'a([bc]+)(c*d)'i parsed_regex: 'a([bc]+)(c*d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-BC-D
+95_y: OK regex: 'a([bc]*)(c+d)'i parsed_regex: 'a([bc]*)(c+d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-B-CD
+96_y: OK regex: 'a[bcd]*dcdcde'i parsed_regex: 'a[bcd]*dcdcde'i str: ADCDCDE result_expr: $& expected_results ADCDCDE
+97_n: OK regex: 'a[bcd]+dcdcde'i parsed_regex: 'a[bcd]+dcdcde'i str: ADCDCDE result_expr: - expected_results -
+98_y: OK regex: '(ab|a)b*c'i parsed_regex: '(ab|a)b*c'i str: ABC result_expr: $&-$1 expected_results ABC-AB
+99_y: OK regex: '((a)(b)c)(d)'i parsed_regex: '((a)(b)c)(d)'i str: ABCD result_expr: $1-$2-$3-$4 expected_results ABC-A-B-D
+100_y: OK regex: '[a-zA-Z_][a-zA-Z0-9_]*'i parsed_regex: '[a-zA-Z_][a-zA-Z0-9_]*'i str: ALPHA result_expr: $& expected_results ALPHA
+101_y: OK regex: '^a(bc+|b[eh])g|.h$'i parsed_regex: '^a(bc+|b[eh])g|.h$'i str: ABH result_expr: $&-$1 expected_results BH-
+102_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: EFFGZ result_expr: $&-$1-$2 expected_results EFFGZ-EFFGZ-
+103_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: IJ result_expr: $&-$1-$2 expected_results IJ-IJ-J
+104_n: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: EFFG result_expr: - expected_results -
+105_n: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: BCDD result_expr: - expected_results -
+106_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: REFFGZ result_expr: $&-$1-$2 expected_results EFFGZ-EFFGZ-
+107_y: OK regex: '((((((((((a))))))))))'i parsed_regex: '((((((((((a))))))))))'i str: A result_expr: $10 expected_results A
+108_y: OK regex: '((((((((((a))))))))))\10'i parsed_regex: '((((((((((a))))))))))\10'i str: AA result_expr: $& expected_results AA
+109_y: OK regex: '(((((((((a)))))))))'i parsed_regex: '(((((((((a)))))))))'i str: A result_expr: $& expected_results A
+110_n: OK regex: 'multiple words of text'i parsed_regex: 'multiple words of text'i str: UH-UH result_expr: - expected_results -
+111_y: OK regex: 'multiple words'i parsed_regex: 'multiple words'i str: MULTIPLE WORDS, YEAH result_expr: $& expected_results MULTIPLE WORDS
+112_y: OK regex: '(.*)c(.*)'i parsed_regex: '(.*)c(.*)'i str: ABCDE result_expr: $&-$1-$2 expected_results ABCDE-AB-DE
+113_y: OK regex: '\((.*), (.*)\)'i parsed_regex: '\((.*), (.*)\)'i str: (A, B) result_expr: ($2, $1) expected_results (B, A)
+114_n: OK regex: '[k]'i parsed_regex: '[k]'i str: AB result_expr: - expected_results -
+115_y: OK regex: 'abcd'i parsed_regex: 'abcd'i str: ABCD result_expr: $& expected_results ABCD
+116_y: OK regex: 'a(bc)d'i parsed_regex: 'a(bc)d'i str: ABCD result_expr: $1 expected_results BC
+117_y: OK regex: 'a[-]?c'i parsed_regex: 'a[-]?c'i str: AC result_expr: $& expected_results AC
+118_y: OK regex: '(abc)\1'i parsed_regex: '(abc)\1'i str: ABCABC result_expr: $1 expected_results ABC
+119_y: OK regex: '([a-c]*)\1'i parsed_regex: '([a-c]*)\1'i str: ABCABC result_expr: $1 expected_results ABC
+
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_12_case_insensitive.cpp.output b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_12_case_insensitive.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_13_posessive_modifier.cpp.execution b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_13_posessive_modifier.cpp.execution
new file mode 100644
index 000000000..916d1a084
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_13_posessive_modifier.cpp.execution
@@ -0,0 +1,50 @@
+Running tests_13_posessive_modifier:
+01_n: OK regex: a++a parsed_regex: a++a str: aaaaa result_expr: - expected_results -
+02_n: OK regex: a*+a parsed_regex: a*+a str: aaaaa result_expr: - expected_results -
+03_n: OK regex: a{1,5}+a parsed_regex: a{1,5}+a str: aaaaa result_expr: - expected_results -
+04_n: OK regex: a?+a parsed_regex: a?+a str: ab result_expr: - expected_results -
+05_y: OK regex: a++b parsed_regex: a++b str: aaaaab result_expr: $& expected_results aaaaab
+06_y: OK regex: a*+b parsed_regex: a*+b str: aaaaab result_expr: $& expected_results aaaaab
+07_y: OK regex: a{1,5}+b parsed_regex: a{1,5}+b str: aaaaab result_expr: $& expected_results aaaaab
+08_y: OK regex: a?+b parsed_regex: a?+b str: ab result_expr: $& expected_results ab
+09_n: OK regex: fooa++a parsed_regex: fooa++a str: fooaaaaa result_expr: - expected_results -
+10_n: OK regex: fooa*+a parsed_regex: fooa*+a str: fooaaaaa result_expr: - expected_results -
+11_n: OK regex: fooa{1,5}+a parsed_regex: fooa{1,5}+a str: fooaaaaa result_expr: - expected_results -
+12_n: OK regex: fooa?+a parsed_regex: fooa?+a str: fooab result_expr: - expected_results -
+13_y: OK regex: fooa++b parsed_regex: fooa++b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+14_y: OK regex: fooa*+b parsed_regex: fooa*+b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+15_y: OK regex: fooa{1,5}+b parsed_regex: fooa{1,5}+b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+16_y: OK regex: fooa?+b parsed_regex: fooa?+b str: fooab result_expr: $& expected_results fooab
+17_n: OK regex: (aA)++(aA) parsed_regex: (aA)++(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+18_n: OK regex: (aA|bB)++(aA|bB) parsed_regex: (aA|bB)++(aA|bB) str: aAaAbBaAbB result_expr: - expected_results aAaAbBaAbB
+19_n: OK regex: (aA)*+(aA) parsed_regex: (aA)*+(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+20_n: OK regex: (aA|bB)*+(aA|bB) parsed_regex: (aA|bB)*+(aA|bB) str: aAaAbBaAaA result_expr: - expected_results aAaAbBaAaA
+21_n: OK regex: (aA){1,5}+(aA) parsed_regex: (aA){1,5}+(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+22_n: OK regex: (aA|bB){1,5}+(aA|bB) parsed_regex: (aA|bB){1,5}+(aA|bB) str: aAaAbBaAaA result_expr: - expected_results aAaAbBaAaA
+23_n: OK regex: (aA)?+(aA) parsed_regex: (aA)?+(aA) str: aAb result_expr: - expected_results aAb
+24_n: OK regex: (aA|bB)?+(aA|bB) parsed_regex: (aA|bB)?+(aA|bB) str: bBb result_expr: - expected_results bBb
+25_y: OK regex: (aA)++b parsed_regex: (aA)++b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+26_y: OK regex: (aA|bB)++b parsed_regex: (aA|bB)++b str: aAbBaAaAbBb result_expr: $& expected_results aAbBaAaAbBb
+27_y: OK regex: (aA)*+b parsed_regex: (aA)*+b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+28_y: OK regex: (aA|bB)*+b parsed_regex: (aA|bB)*+b str: bBbBbBbBbBb result_expr: $& expected_results bBbBbBbBbBb
+29_y: OK regex: (aA){1,5}+b parsed_regex: (aA){1,5}+b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+30_y: OK regex: (aA|bB){1,5}+b parsed_regex: (aA|bB){1,5}+b str: bBaAbBaAbBb result_expr: $& expected_results bBaAbBaAbBb
+31_y: OK regex: (aA)?+b parsed_regex: (aA)?+b str: aAb result_expr: $& expected_results aAb
+32_y: OK regex: (aA|bB)?+b parsed_regex: (aA|bB)?+b str: bBb result_expr: $& expected_results bBb
+33_n: OK regex: foo(aA)++(aA) parsed_regex: foo(aA)++(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+34_n: OK regex: foo(aA|bB)++(aA|bB) parsed_regex: foo(aA|bB)++(aA|bB) str: foobBbBbBaAaA result_expr: - expected_results foobBbBbBaAaA
+35_n: OK regex: foo(aA)*+(aA) parsed_regex: foo(aA)*+(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+36_n: OK regex: foo(aA|bB)*+(aA|bB) parsed_regex: foo(aA|bB)*+(aA|bB) str: foobBaAbBaAaA result_expr: - expected_results foobBaAbBaAaA
+37_n: OK regex: foo(aA){1,5}+(aA) parsed_regex: foo(aA){1,5}+(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+38_n: OK regex: foo(aA|bB){1,5}+(aA|bB) parsed_regex: foo(aA|bB){1,5}+(aA|bB) str: fooaAbBbBaAaA result_expr: - expected_results fooaAbBbBaAaA
+39_n: OK regex: foo(aA)?+(aA) parsed_regex: foo(aA)?+(aA) str: fooaAb result_expr: - expected_results fooaAb
+40_n: OK regex: foo(aA|bB)?+(aA|bB) parsed_regex: foo(aA|bB)?+(aA|bB) str: foobBb result_expr: - expected_results foobBb
+41_y: OK regex: foo(aA)++b parsed_regex: foo(aA)++b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+42_y: OK regex: foo(aA|bB)++b parsed_regex: foo(aA|bB)++b str: foobBaAbBaAbBb result_expr: $& expected_results foobBaAbBaAbBb
+43_y: OK regex: foo(aA)*+b parsed_regex: foo(aA)*+b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+44_y: OK regex: foo(aA|bB)*+b parsed_regex: foo(aA|bB)*+b str: foobBbBaAaAaAb result_expr: $& expected_results foobBbBaAaAaAb
+45_y: OK regex: foo(aA){1,5}+b parsed_regex: foo(aA){1,5}+b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+46_y: OK regex: foo(aA|bB){1,5}+b parsed_regex: foo(aA|bB){1,5}+b str: foobBaAaAaAaAb result_expr: $& expected_results foobBaAaAaAaAb
+47_y: OK regex: foo(aA)?+b parsed_regex: foo(aA)?+b str: fooaAb result_expr: $& expected_results fooaAb
+48_y: OK regex: foo(aA|bB)?+b parsed_regex: foo(aA|bB)?+b str: foobBb result_expr: $& expected_results foobBb
+
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_13_posessive_modifier.cpp.output b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_13_posessive_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_14_multiline_modifier.cpp.execution b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_14_multiline_modifier.cpp.execution
new file mode 100644
index 000000000..9a12081ac
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_14_multiline_modifier.cpp.execution
@@ -0,0 +1,533 @@
+Running tests_14_multiline_modifier:
+01_y: OK regex: \Z parsed_regex: \Z str: a
+b
+ result_expr: $-[0] expected_results 3
+02_y: OK regex: \z parsed_regex: \z str: a
+b
+ result_expr: $-[0] expected_results 4
+03_y: OK regex: $ parsed_regex: $ str: a
+b
+ result_expr: $-[0] expected_results 3
+04_y: OK regex: \Z parsed_regex: \Z str: b
+a
+ result_expr: $-[0] expected_results 3
+05_y: OK regex: \z parsed_regex: \z str: b
+a
+ result_expr: $-[0] expected_results 4
+06_y: OK regex: $ parsed_regex: $ str: b
+a
+ result_expr: $-[0] expected_results 3
+07_y: OK regex: \Z parsed_regex: \Z str: b
+a result_expr: $-[0] expected_results 3
+08_y: OK regex: \z parsed_regex: \z str: b
+a result_expr: $-[0] expected_results 3
+09_y: OK regex: $ parsed_regex: $ str: b
+a result_expr: $-[0] expected_results 3
+10_y: OK regex: '\Z'm parsed_regex: '\Z'm str: a
+b
+ result_expr: $-[0] expected_results 3
+11_y: OK regex: '\z'm parsed_regex: '\z'm str: a
+b
+ result_expr: $-[0] expected_results 4
+12_y: OK regex: '$'m parsed_regex: '$'m str: a
+b
+ result_expr: $-[0] expected_results 1
+13_y: OK regex: '\Z'm parsed_regex: '\Z'm str: b
+a
+ result_expr: $-[0] expected_results 3
+14_y: OK regex: '\z'm parsed_regex: '\z'm str: b
+a
+ result_expr: $-[0] expected_results 4
+15_y: OK regex: '$'m parsed_regex: '$'m str: b
+a
+ result_expr: $-[0] expected_results 1
+16_y: OK regex: '\Z'm parsed_regex: '\Z'm str: b
+a result_expr: $-[0] expected_results 3
+17_y: OK regex: '\z'm parsed_regex: '\z'm str: b
+a result_expr: $-[0] expected_results 3
+18_y: OK regex: '$'m parsed_regex: '$'m str: b
+a result_expr: $-[0] expected_results 1
+19_n: OK regex: a\Z parsed_regex: a\Z str: a
+b
+ result_expr: - expected_results -
+20_n: OK regex: a\z parsed_regex: a\z str: a
+b
+ result_expr: - expected_results -
+21_n: OK regex: a$ parsed_regex: a$ str: a
+b
+ result_expr: - expected_results -
+22_y: OK regex: a\Z parsed_regex: a\Z str: b
+a
+ result_expr: $-[0] expected_results 2
+23_n: OK regex: a\z parsed_regex: a\z str: b
+a
+ result_expr: - expected_results -
+24_y: OK regex: a$ parsed_regex: a$ str: b
+a
+ result_expr: $-[0] expected_results 2
+25_y: OK regex: a\Z parsed_regex: a\Z str: b
+a result_expr: $-[0] expected_results 2
+26_y: OK regex: a\z parsed_regex: a\z str: b
+a result_expr: $-[0] expected_results 2
+27_y: OK regex: a$ parsed_regex: a$ str: b
+a result_expr: $-[0] expected_results 2
+28_n: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: a
+b
+ result_expr: - expected_results -
+29_n: OK regex: 'a\z'm parsed_regex: 'a\z'm str: a
+b
+ result_expr: - expected_results -
+30_y: OK regex: 'a$'m parsed_regex: 'a$'m str: a
+b
+ result_expr: $-[0] expected_results 0
+31_y: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: b
+a
+ result_expr: $-[0] expected_results 2
+32_n: OK regex: 'a\z'm parsed_regex: 'a\z'm str: b
+a
+ result_expr: - expected_results -
+33_y: OK regex: 'a$'m parsed_regex: 'a$'m str: b
+a
+ result_expr: $-[0] expected_results 2
+34_y: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: b
+a result_expr: $-[0] expected_results 2
+35_y: OK regex: 'a\z'm parsed_regex: 'a\z'm str: b
+a result_expr: $-[0] expected_results 2
+36_y: OK regex: 'a$'m parsed_regex: 'a$'m str: b
+a result_expr: $-[0] expected_results 2
+37_n: OK regex: aa\Z parsed_regex: aa\Z str: aa
+b
+ result_expr: - expected_results -
+38_n: OK regex: aa\z parsed_regex: aa\z str: aa
+b
+ result_expr: - expected_results -
+39_n: OK regex: aa$ parsed_regex: aa$ str: aa
+b
+ result_expr: - expected_results -
+40_y: OK regex: aa\Z parsed_regex: aa\Z str: b
+aa
+ result_expr: $-[0] expected_results 2
+41_n: OK regex: aa\z parsed_regex: aa\z str: b
+aa
+ result_expr: - expected_results -
+42_y: OK regex: aa$ parsed_regex: aa$ str: b
+aa
+ result_expr: $-[0] expected_results 2
+43_y: OK regex: aa\Z parsed_regex: aa\Z str: b
+aa result_expr: $-[0] expected_results 2
+44_y: OK regex: aa\z parsed_regex: aa\z str: b
+aa result_expr: $-[0] expected_results 2
+45_y: OK regex: aa$ parsed_regex: aa$ str: b
+aa result_expr: $-[0] expected_results 2
+46_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: aa
+b
+ result_expr: - expected_results -
+47_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: aa
+b
+ result_expr: - expected_results -
+48_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: aa
+b
+ result_expr: $-[0] expected_results 0
+49_y: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+aa
+ result_expr: $-[0] expected_results 2
+50_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+aa
+ result_expr: - expected_results -
+51_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+aa
+ result_expr: $-[0] expected_results 2
+52_y: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+aa result_expr: $-[0] expected_results 2
+53_y: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+aa result_expr: $-[0] expected_results 2
+54_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+aa result_expr: $-[0] expected_results 2
+55_n: OK regex: aa\Z parsed_regex: aa\Z str: ac
+b
+ result_expr: - expected_results -
+56_n: OK regex: aa\z parsed_regex: aa\z str: ac
+b
+ result_expr: - expected_results -
+57_n: OK regex: aa$ parsed_regex: aa$ str: ac
+b
+ result_expr: - expected_results -
+58_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ac
+ result_expr: - expected_results -
+59_n: OK regex: aa\z parsed_regex: aa\z str: b
+ac
+ result_expr: - expected_results -
+60_n: OK regex: aa$ parsed_regex: aa$ str: b
+ac
+ result_expr: - expected_results -
+61_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ac result_expr: - expected_results -
+62_n: OK regex: aa\z parsed_regex: aa\z str: b
+ac result_expr: - expected_results -
+63_n: OK regex: aa$ parsed_regex: aa$ str: b
+ac result_expr: - expected_results -
+64_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: ac
+b
+ result_expr: - expected_results -
+65_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: ac
+b
+ result_expr: - expected_results -
+66_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: ac
+b
+ result_expr: - expected_results -
+67_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ac
+ result_expr: - expected_results -
+68_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ac
+ result_expr: - expected_results -
+69_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ac
+ result_expr: - expected_results -
+70_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ac result_expr: - expected_results -
+71_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ac result_expr: - expected_results -
+72_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ac result_expr: - expected_results -
+73_n: OK regex: aa\Z parsed_regex: aa\Z str: ca
+b
+ result_expr: - expected_results -
+74_n: OK regex: aa\z parsed_regex: aa\z str: ca
+b
+ result_expr: - expected_results -
+75_n: OK regex: aa$ parsed_regex: aa$ str: ca
+b
+ result_expr: - expected_results -
+76_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ca
+ result_expr: - expected_results -
+77_n: OK regex: aa\z parsed_regex: aa\z str: b
+ca
+ result_expr: - expected_results -
+78_n: OK regex: aa$ parsed_regex: aa$ str: b
+ca
+ result_expr: - expected_results -
+79_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ca result_expr: - expected_results -
+80_n: OK regex: aa\z parsed_regex: aa\z str: b
+ca result_expr: - expected_results -
+81_n: OK regex: aa$ parsed_regex: aa$ str: b
+ca result_expr: - expected_results -
+82_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: ca
+b
+ result_expr: - expected_results -
+83_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: ca
+b
+ result_expr: - expected_results -
+84_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: ca
+b
+ result_expr: - expected_results -
+85_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ca
+ result_expr: - expected_results -
+86_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ca
+ result_expr: - expected_results -
+87_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ca
+ result_expr: - expected_results -
+88_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ca result_expr: - expected_results -
+89_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ca result_expr: - expected_results -
+90_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ca result_expr: - expected_results -
+91_n: OK regex: ab\Z parsed_regex: ab\Z str: ab
+b
+ result_expr: - expected_results -
+92_n: OK regex: ab\z parsed_regex: ab\z str: ab
+b
+ result_expr: - expected_results -
+93_n: OK regex: ab$ parsed_regex: ab$ str: ab
+b
+ result_expr: - expected_results -
+94_y: OK regex: ab\Z parsed_regex: ab\Z str: b
+ab
+ result_expr: $-[0] expected_results 2
+95_n: OK regex: ab\z parsed_regex: ab\z str: b
+ab
+ result_expr: - expected_results -
+96_y: OK regex: ab$ parsed_regex: ab$ str: b
+ab
+ result_expr: $-[0] expected_results 2
+97_y: OK regex: ab\Z parsed_regex: ab\Z str: b
+ab result_expr: $-[0] expected_results 2
+98_y: OK regex: ab\z parsed_regex: ab\z str: b
+ab result_expr: $-[0] expected_results 2
+99_y: OK regex: ab$ parsed_regex: ab$ str: b
+ab result_expr: $-[0] expected_results 2
+100_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ab
+b
+ result_expr: - expected_results -
+101_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ab
+b
+ result_expr: - expected_results -
+102_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ab
+b
+ result_expr: $-[0] expected_results 0
+103_y: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ab
+ result_expr: $-[0] expected_results 2
+104_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ab
+ result_expr: - expected_results -
+105_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ab
+ result_expr: $-[0] expected_results 2
+106_y: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ab result_expr: $-[0] expected_results 2
+107_y: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ab result_expr: $-[0] expected_results 2
+108_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ab result_expr: $-[0] expected_results 2
+109_n: OK regex: ab\Z parsed_regex: ab\Z str: ac
+b
+ result_expr: - expected_results -
+110_n: OK regex: ab\z parsed_regex: ab\z str: ac
+b
+ result_expr: - expected_results -
+111_n: OK regex: ab$ parsed_regex: ab$ str: ac
+b
+ result_expr: - expected_results -
+112_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ac
+ result_expr: - expected_results -
+113_n: OK regex: ab\z parsed_regex: ab\z str: b
+ac
+ result_expr: - expected_results -
+114_n: OK regex: ab$ parsed_regex: ab$ str: b
+ac
+ result_expr: - expected_results -
+115_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ac result_expr: - expected_results -
+116_n: OK regex: ab\z parsed_regex: ab\z str: b
+ac result_expr: - expected_results -
+117_n: OK regex: ab$ parsed_regex: ab$ str: b
+ac result_expr: - expected_results -
+118_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ac
+b
+ result_expr: - expected_results -
+119_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ac
+b
+ result_expr: - expected_results -
+120_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ac
+b
+ result_expr: - expected_results -
+121_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ac
+ result_expr: - expected_results -
+122_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ac
+ result_expr: - expected_results -
+123_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ac
+ result_expr: - expected_results -
+124_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ac result_expr: - expected_results -
+125_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ac result_expr: - expected_results -
+126_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ac result_expr: - expected_results -
+127_n: OK regex: ab\Z parsed_regex: ab\Z str: ca
+b
+ result_expr: - expected_results -
+128_n: OK regex: ab\z parsed_regex: ab\z str: ca
+b
+ result_expr: - expected_results -
+129_n: OK regex: ab$ parsed_regex: ab$ str: ca
+b
+ result_expr: - expected_results -
+130_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ca
+ result_expr: - expected_results -
+131_n: OK regex: ab\z parsed_regex: ab\z str: b
+ca
+ result_expr: - expected_results -
+132_n: OK regex: ab$ parsed_regex: ab$ str: b
+ca
+ result_expr: - expected_results -
+133_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ca result_expr: - expected_results -
+134_n: OK regex: ab\z parsed_regex: ab\z str: b
+ca result_expr: - expected_results -
+135_n: OK regex: ab$ parsed_regex: ab$ str: b
+ca result_expr: - expected_results -
+136_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ca
+b
+ result_expr: - expected_results -
+137_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ca
+b
+ result_expr: - expected_results -
+138_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ca
+b
+ result_expr: - expected_results -
+139_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ca
+ result_expr: - expected_results -
+140_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ca
+ result_expr: - expected_results -
+141_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ca
+ result_expr: - expected_results -
+142_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ca result_expr: - expected_results -
+143_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ca result_expr: - expected_results -
+144_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ca result_expr: - expected_results -
+145_n: OK regex: abb\Z parsed_regex: abb\Z str: abb
+b
+ result_expr: - expected_results -
+146_n: OK regex: abb\z parsed_regex: abb\z str: abb
+b
+ result_expr: - expected_results -
+147_n: OK regex: abb$ parsed_regex: abb$ str: abb
+b
+ result_expr: - expected_results -
+148_y: OK regex: abb\Z parsed_regex: abb\Z str: b
+abb
+ result_expr: $-[0] expected_results 2
+149_n: OK regex: abb\z parsed_regex: abb\z str: b
+abb
+ result_expr: - expected_results -
+150_y: OK regex: abb$ parsed_regex: abb$ str: b
+abb
+ result_expr: $-[0] expected_results 2
+151_y: OK regex: abb\Z parsed_regex: abb\Z str: b
+abb result_expr: $-[0] expected_results 2
+152_y: OK regex: abb\z parsed_regex: abb\z str: b
+abb result_expr: $-[0] expected_results 2
+153_y: OK regex: abb$ parsed_regex: abb$ str: b
+abb result_expr: $-[0] expected_results 2
+154_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: abb
+b
+ result_expr: - expected_results -
+155_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: abb
+b
+ result_expr: - expected_results -
+156_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: abb
+b
+ result_expr: $-[0] expected_results 0
+157_y: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+abb
+ result_expr: $-[0] expected_results 2
+158_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+abb
+ result_expr: - expected_results -
+159_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+abb
+ result_expr: $-[0] expected_results 2
+160_y: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+abb result_expr: $-[0] expected_results 2
+161_y: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+abb result_expr: $-[0] expected_results 2
+162_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+abb result_expr: $-[0] expected_results 2
+163_n: OK regex: abb\Z parsed_regex: abb\Z str: ac
+b
+ result_expr: - expected_results -
+164_n: OK regex: abb\z parsed_regex: abb\z str: ac
+b
+ result_expr: - expected_results -
+165_n: OK regex: abb$ parsed_regex: abb$ str: ac
+b
+ result_expr: - expected_results -
+166_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ac
+ result_expr: - expected_results -
+167_n: OK regex: abb\z parsed_regex: abb\z str: b
+ac
+ result_expr: - expected_results -
+168_n: OK regex: abb$ parsed_regex: abb$ str: b
+ac
+ result_expr: - expected_results -
+169_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ac result_expr: - expected_results -
+170_n: OK regex: abb\z parsed_regex: abb\z str: b
+ac result_expr: - expected_results -
+171_n: OK regex: abb$ parsed_regex: abb$ str: b
+ac result_expr: - expected_results -
+172_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: ac
+b
+ result_expr: - expected_results -
+173_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: ac
+b
+ result_expr: - expected_results -
+174_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: ac
+b
+ result_expr: - expected_results -
+175_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ac
+ result_expr: - expected_results -
+176_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ac
+ result_expr: - expected_results -
+177_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ac
+ result_expr: - expected_results -
+178_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ac result_expr: - expected_results -
+179_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ac result_expr: - expected_results -
+180_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ac result_expr: - expected_results -
+181_n: OK regex: abb\Z parsed_regex: abb\Z str: ca
+b
+ result_expr: - expected_results -
+182_n: OK regex: abb\z parsed_regex: abb\z str: ca
+b
+ result_expr: - expected_results -
+183_n: OK regex: abb$ parsed_regex: abb$ str: ca
+b
+ result_expr: - expected_results -
+184_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ca
+ result_expr: - expected_results -
+185_n: OK regex: abb\z parsed_regex: abb\z str: b
+ca
+ result_expr: - expected_results -
+186_n: OK regex: abb$ parsed_regex: abb$ str: b
+ca
+ result_expr: - expected_results -
+187_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ca result_expr: - expected_results -
+188_n: OK regex: abb\z parsed_regex: abb\z str: b
+ca result_expr: - expected_results -
+189_n: OK regex: abb$ parsed_regex: abb$ str: b
+ca result_expr: - expected_results -
+190_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: ca
+b
+ result_expr: - expected_results -
+191_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: ca
+b
+ result_expr: - expected_results -
+192_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: ca
+b
+ result_expr: - expected_results -
+193_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ca
+ result_expr: - expected_results -
+194_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ca
+ result_expr: - expected_results -
+195_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ca
+ result_expr: - expected_results -
+196_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ca result_expr: - expected_results -
+197_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ca result_expr: - expected_results -
+198_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ca result_expr: - expected_results -
+199_y: OK regex: '\Aa$'m parsed_regex: '\Aa$'m str: a
+
+ result_expr: $& expected_results a
+
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_14_multiline_modifier.cpp.output b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_14_multiline_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_15_group_modifiers.cpp.execution b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_15_group_modifiers.cpp.execution
new file mode 100644
index 000000000..de92abc48
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_15_group_modifiers.cpp.execution
@@ -0,0 +1,87 @@
+Running tests_15_group_modifiers:
+01_y: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: ab result_expr: $& expected_results ab
+02_y: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: ab result_expr: $&:$1 expected_results ab:a
+03_y: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: Ab result_expr: $& expected_results Ab
+04_y: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: Ab result_expr: $&:$1 expected_results Ab:A
+05_n: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: aB result_expr: - expected_results -
+06_n: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: aB result_expr: - expected_results -
+07_y: OK regex: (?i:a)b parsed_regex: (?i:a)b str: ab result_expr: $& expected_results ab
+08_y: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: ab result_expr: $&:$1 expected_results ab:a
+09_y: OK regex: (?i:a)b parsed_regex: (?i:a)b str: Ab result_expr: $& expected_results Ab
+10_y: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: Ab result_expr: $&:$1 expected_results Ab:A
+11_n: OK regex: (?i:a)b parsed_regex: (?i:a)b str: aB result_expr: - expected_results -
+12_n: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: aB result_expr: - expected_results -
+13_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: ab result_expr: $& expected_results ab
+14_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: ab result_expr: $&:$1 expected_results ab:a
+15_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: aB result_expr: $& expected_results aB
+16_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: aB result_expr: $&:$1 expected_results aB:a
+17_n: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: Ab result_expr: - expected_results -
+18_n: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: Ab result_expr: - expected_results -
+19_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: aB result_expr: $& expected_results aB
+20_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: aB result_expr: $1 expected_results a
+21_n: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: AB result_expr: - expected_results -
+22_n: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: AB result_expr: - expected_results -
+23_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: ab result_expr: $& expected_results ab
+24_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: ab result_expr: $&:$1 expected_results ab:a
+25_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: aB result_expr: $& expected_results aB
+26_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: aB result_expr: $&:$1 expected_results aB:a
+27_n: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: Ab result_expr: - expected_results -
+28_n: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: Ab result_expr: - expected_results -
+29_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: aB result_expr: $& expected_results aB
+30_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: aB result_expr: $1 expected_results a
+31_n: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: AB result_expr: - expected_results -
+32_n: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: AB result_expr: - expected_results -
+33_n: OK regex: '((?-i:a.))b'i parsed_regex: '((?-i:a.))b'i str: a
+B result_expr: - expected_results -
+34_n: OK regex: '((?-i:a\N))b'i parsed_regex: '((?-i:a\N))b'i str: a
+B result_expr: - expected_results -
+35_y: OK regex: '((?s-i:a.))b'i parsed_regex: '((?s-i:a.))b'i str: a
+B result_expr: $1 expected_results a
+
+36_n: OK regex: '((?s-i:a\N))b'i parsed_regex: '((?s-i:a\N))b'i str: a
+B result_expr: - expected_results -
+37_n: OK regex: '((?s-i:a.))b'i parsed_regex: '((?s-i:a.))b'i str: B
+B result_expr: - expected_results -
+38_n: OK regex: '((?s-i:a\N))b'i parsed_regex: '((?s-i:a\N))b'i str: B
+B result_expr: - expected_results -
+39_y: OK regex: (?i:.[b].) parsed_regex: (?i:.[b].) str: abd result_expr: $& expected_results abd
+40_y: OK regex: (?i:\N[b]\N) parsed_regex: (?i:\N[b]\N) str: abd result_expr: $& expected_results abd
+41_n: OK regex: ^(?:a?b?)*$ parsed_regex: ^(?:a?b?)*$ str: a-- result_expr: - expected_results -
+42_y: OK regex: ((?s)^a(.))((?m)^b$) parsed_regex: ((?s)^a(.))((?m)^b$) str: a
+b
+c
+ result_expr: $1;$2;$3 expected_results a
+;
+;b
+43_y: OK regex: ((?m)^b$) parsed_regex: ((?m)^b$) str: a
+b
+c
+ result_expr: $1 expected_results b
+44_y: OK regex: (?m)^b parsed_regex: (?m)^b str: a
+b
+ result_expr: $& expected_results b
+45_y: OK regex: (?m)^(b) parsed_regex: (?m)^(b) str: a
+b
+ result_expr: $1 expected_results b
+46_y: OK regex: ((?m)^b) parsed_regex: ((?m)^b) str: a
+b
+ result_expr: $1 expected_results b
+47_y: OK regex: \n((?m)^b) parsed_regex: \n((?m)^b) str: a
+b
+ result_expr: $1 expected_results b
+48_n: OK regex: ^b parsed_regex: ^b str: a
+b
+c
+ result_expr: - expected_results -
+49_n: OK regex: ()^b parsed_regex: ()^b str: a
+b
+c
+ result_expr: - expected_results -
+50_y: OK regex: ((?m)^b) parsed_regex: ((?m)^b) str: a
+b
+c
+ result_expr: $1 expected_results b
+51_y: OK Warning: Parsed regex does not match. regex: '(foo)'n parsed_regex: '(?:foo)'n str: foobar result_expr: $&-$1 expected_results foo-
+52_y: OK Warning: Parsed regex does not match. regex: '(?-n)(foo)(?n)(bar)'n parsed_regex: '(?-n)(foo)(?n)(?:bar)'n str: foobar result_expr: $&-$1-$2 expected_results foobar-foo-
+53_y: OK Warning: Parsed regex does not match. regex: '(?-n:(foo)(?n:(bar)))'n parsed_regex: '(?-n:(foo)(?n:(?:bar)))'n str: foobar result_expr: $&-$1-$2 expected_results foobar-foo-
+
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_15_group_modifiers.cpp.output b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_15_group_modifiers.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_16_perl_syntax_modifier.cpp.execution b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_16_perl_syntax_modifier.cpp.execution
new file mode 100644
index 000000000..761720007
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_16_perl_syntax_modifier.cpp.execution
@@ -0,0 +1,35 @@
+Running tests_16_perl_syntax_modifier:
+01_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $& expected_results a
+02_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $-[0] expected_results 0
+03_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $+[0] expected_results 1
+04_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $& expected_results abbb
+05_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $-[0] expected_results 0
+06_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $+[0] expected_results 4
+07_y: OK Warning: Parsed regex does not match. regex: /a\N c/x parsed_regex: /a\Nc/x str: abc result_expr: $& expected_results abc
+08_y: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzc result_expr: $& expected_results axyzc
+09_n: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzd result_expr: - expected_results -
+10_yS: OK regex: /[a b]/x parsed_regex: /[a b]/x str:   result_expr: $& expected_results  
+11_n: OK regex: /[a b]/xx parsed_regex: /[a b]/xx str:   result_expr: - expected_results -
+12_y: OK regex: /[a\ b]/xx parsed_regex: /[a\ b]/xx str:   result_expr: $& expected_results  
+13_n: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: a result_expr: - expected_results -
+14_n: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: b result_expr: - expected_results -
+15_y: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: A result_expr: $& expected_results A
+16_yS: OK regex: /(?x:[a b])/xx parsed_regex: /(?x:[a b])/xx str:   result_expr: $& expected_results  
+17_n: OK regex: /(?xx:[a b])/x parsed_regex: /(?xx:[a b])/x str:   result_expr: - expected_results -
+18_yS: OK regex: /(?x)[a b]/xx parsed_regex: /(?x)[a b]/xx str:   result_expr: $& expected_results  
+19_n: OK regex: /(?xx)[a b]/x parsed_regex: /(?xx)[a b]/x str:   result_expr: - expected_results -
+20_yS: OK regex: /(?-x:[a b])/xx parsed_regex: /(?-x:[a b])/xx str:   result_expr: $& expected_results  
+21_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $& expected_results a
+22_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $-[0] expected_results 0
+23_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $+[0] expected_results 1
+24_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $& expected_results abbb
+25_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $-[0] expected_results 0
+26_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $+[0] expected_results 4
+27_y: OK Warning: Parsed regex does not match. regex: /a\N c/x parsed_regex: /a\Nc/x str: abc result_expr: $& expected_results abc
+28_y: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzc result_expr: $& expected_results axyzc
+29_n: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzd result_expr: - expected_results -
+30_y: OK regex: /[#]/ parsed_regex: /[#]/ str: a#b result_expr: $& expected_results #
+31_y: OK regex: /[#]b/ parsed_regex: /[#]b/ str: a#b result_expr: $& expected_results #b
+32_y: OK regex: /[#]/x parsed_regex: /[#]/x str: a#b result_expr: $& expected_results #
+33_y: OK regex: /[#]b/x parsed_regex: /[#]b/x str: a#b result_expr: $& expected_results #b
+
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_16_perl_syntax_modifier.cpp.output b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_16_perl_syntax_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_17_comments.cpp.execution b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_17_comments.cpp.execution
new file mode 100644
index 000000000..17c9a5d55
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_17_comments.cpp.execution
@@ -0,0 +1,5 @@
+Running tests_17_comments:
+01_y: OK regex: ^a(?#xxx){3}c parsed_regex: ^a(?#xxx){3}c str: aaac result_expr: $& expected_results aaac
+02_y: OK Warning: Parsed regex does not match. regex: '^a (?#xxx) (?#yyy) {3}c'x parsed_regex: '^a(?#xxx)(?#yyy){3}c'x str: aaac result_expr: $& expected_results aaac
+03_y: OK Warning: Parsed regex does not match. regex: 'foo # Match foo'x parsed_regex: 'foo'x str: foobar result_expr: $& expected_results foo
+
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_17_comments.cpp.output b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_17_comments.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_18_branch_reset.cpp.execution b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_18_branch_reset.cpp.execution
new file mode 100644
index 000000000..1d088ce31
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_18_branch_reset.cpp.execution
@@ -0,0 +1,17 @@
+Running tests_18_branch_reset:
+01_y: OK regex: (?|(a)) parsed_regex: (?|(a)) str: a result_expr: $1-$+ expected_results a-a
+02_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: d!o!da result_expr: $1-$2-$3 expected_results !o!-o-a
+03_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: aabc result_expr: $1-$2-$3 expected_results a--c
+04_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: ixyjp result_expr: $1-$2-$3 expected_results x-y-p
+05_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: a result_expr: $1 expected_results a
+06_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: b result_expr: $1 expected_results b
+07_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: c result_expr: $1 expected_results c
+08_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: d result_expr: $1 expected_results d
+09_y: OK regex: (.)(?|(.)(.)x|(.)d)(.) parsed_regex: (.)(?|(.)(.)x|(.)d)(.) str: abcde result_expr: $1-$2-$3-$4-$5- expected_results b-c--e--
+10_y: OK regex: (\N)(?|(\N)(\N)x|(\N)d)(\N) parsed_regex: (\N)(?|(\N)(\N)x|(\N)d)(\N) str: abcde result_expr: $1-$2-$3-$4-$5- expected_results b-c--e--
+11_yM: OK regex: (?|(?<foo>x)) parsed_regex: (?|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+12_yM: OK regex: (?|(?<foo>x)|(?<bar>y)) parsed_regex: (?|(?<foo>x)|(?<bar>y)) str: x result_expr: $+{foo} expected_results x
+13_yM: OK regex: (?|(?<bar>y)|(?<foo>x)) parsed_regex: (?|(?<bar>y)|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+14_yM: OK regex: (?<bar>)(?|(?<foo>x)) parsed_regex: (?<bar>)(?|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+15_y: OK regex: (?|(b)|()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(a)) parsed_regex: (?|(b)|()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(a)) str: a result_expr: $& expected_results a
+
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_18_branch_reset.cpp.output b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_18_branch_reset.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_19_lookahead.cpp.execution b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_19_lookahead.cpp.execution
new file mode 100644
index 000000000..7b34914b1
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_19_lookahead.cpp.execution
@@ -0,0 +1,77 @@
+Running tests_19_lookahead:
+01_y: OK regex: a(?!b). parsed_regex: a(?!b). str: abad result_expr: $& expected_results ad
+02_y: OK regex: (?=)a parsed_regex: (?=)a str: a result_expr: $& expected_results a
+03_y: OK regex: a(?=d). parsed_regex: a(?=d). str: abad result_expr: $& expected_results ad
+04_y: OK regex: a(?=c|d). parsed_regex: a(?=c|d). str: abad result_expr: $& expected_results ad
+05_y: OK regex: ^(?:b|a(?=(.)))*\1 parsed_regex: ^(?:b|a(?=(.)))*\1 str: abc result_expr: $& expected_results ab
+06_y: OK regex: (?=(a+?))(\1ab) parsed_regex: (?=(a+?))(\1ab) str: aaab result_expr: $2 expected_results aab
+07_n: OK regex: ^(?=(a+?))\1ab parsed_regex: ^(?=(a+?))\1ab str: aaab result_expr: - expected_results -
+08_y: OK regex: (?=(a+?))(\1ab) parsed_regex: (?=(a+?))(\1ab) str: aaab result_expr: $2 expected_results aab
+09_n: OK regex: ^(?=(a+?))\1ab parsed_regex: ^(?=(a+?))\1ab str: aaab result_expr: - expected_results -
+10_y: OK regex: (.*)(?=c) parsed_regex: (.*)(?=c) str: abcd result_expr: $1 expected_results ab
+11_yB: OK regex: (.*)(?=c)c parsed_regex: (.*)(?=c)c str: abcd result_expr: $1 expected_results ab
+12_y: OK regex: (.*)(?=b|c) parsed_regex: (.*)(?=b|c) str: abcd result_expr: $1 expected_results ab
+13_y: OK regex: (.*)(?=b|c)c parsed_regex: (.*)(?=b|c)c str: abcd result_expr: $1 expected_results ab
+14_y: OK regex: (.*)(?=c|b) parsed_regex: (.*)(?=c|b) str: abcd result_expr: $1 expected_results ab
+15_y: OK regex: (.*)(?=c|b)c parsed_regex: (.*)(?=c|b)c str: abcd result_expr: $1 expected_results ab
+16_y: OK regex: (.*)(?=[bc]) parsed_regex: (.*)(?=[bc]) str: abcd result_expr: $1 expected_results ab
+17_yB: OK regex: (.*)(?=[bc])c parsed_regex: (.*)(?=[bc])c str: abcd result_expr: $1 expected_results ab
+18_y: OK regex: (.*?)(?=c) parsed_regex: (.*?)(?=c) str: abcd result_expr: $1 expected_results ab
+19_yB: OK regex: (.*?)(?=c)c parsed_regex: (.*?)(?=c)c str: abcd result_expr: $1 expected_results ab
+20_y: OK regex: (.*?)(?=b|c) parsed_regex: (.*?)(?=b|c) str: abcd result_expr: $1 expected_results a
+21_y: OK regex: (.*?)(?=b|c)c parsed_regex: (.*?)(?=b|c)c str: abcd result_expr: $1 expected_results ab
+22_y: OK regex: (.*?)(?=c|b) parsed_regex: (.*?)(?=c|b) str: abcd result_expr: $1 expected_results a
+23_y: OK regex: (.*?)(?=c|b)c parsed_regex: (.*?)(?=c|b)c str: abcd result_expr: $1 expected_results ab
+24_y: OK regex: (.*?)(?=[bc]) parsed_regex: (.*?)(?=[bc]) str: abcd result_expr: $1 expected_results a
+25_yB: OK regex: (.*?)(?=[bc])c parsed_regex: (.*?)(?=[bc])c str: abcd result_expr: $1 expected_results ab
+26_y: OK regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) parsed_regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) str: aaaaaaaa result_expr: $1 expected_results aaaaaaa
+27_y: OK regex: a(?!b(?!c))(..) parsed_regex: a(?!b(?!c))(..) str: abababc result_expr: $1 expected_results bc
+28_y: OK regex: a(?!b(?=a))(..) parsed_regex: a(?!b(?=a))(..) str: abababc result_expr: $1 expected_results bc
+37_y: OK regex: X(\w+)(?=\s)|X(\w+) parsed_regex: X(\w+)(?=\s)|X(\w+) str: Xab result_expr: [$1-$2] expected_results [-ab]
+38_y: OK regex: ^a*(?=b)b parsed_regex: ^a*(?=b)b str: ab result_expr: $& expected_results ab
+39_y: OK regex: '(?!\A)x'm parsed_regex: '(?!\A)x'm str: a
+xb
+ result_expr: - expected_results -
+40_n: OK regex: '^(o)(?!.*\1)'i parsed_regex: '^(o)(?!.*\1)'i str: Oo result_expr: - expected_results -
+41_n: OK regex: .*a(?!(b|cd)*e).*f parsed_regex: .*a(?!(b|cd)*e).*f str: ......abef result_expr: - expected_results -
+42_y: OK regex: ^(a*?)(?!(aa|aaaa)*$) parsed_regex: ^(a*?)(?!(aa|aaaa)*$) str: aaaaaaaaaaaaaaaaaaaa result_expr: $1 expected_results a
+43_y: OK regex: (?!)+?|(.{2,4}) parsed_regex: (?!)+?|(.{2,4}) str: abcde result_expr: $1 expected_results abcd
+44_y: OK regex: ^(a*?)(?!(a{6}|a{5})*$) parsed_regex: ^(a*?)(?!(a{6}|a{5})*$) str: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa result_expr: $+[1] expected_results 12
+45_y: OK regex: a(?!b(?!c(?!d(?!e))))...(.) parsed_regex: a(?!b(?!c(?!d(?!e))))...(.) str: abxabcdxabcde result_expr: $1 expected_results e
+46_y: OK regex: X(?!b+(?!(c+)*(?!(c+)*d))).*X parsed_regex: X(?!b+(?!(c+)*(?!(c+)*d))).*X str: aXbbbbbbbcccccccccccccaaaX result_expr: - expected_results -
+47_y: OK regex: ((?s).)c(?!.) parsed_regex: ((?s).)c(?!.) str: a
+b
+c
+ result_expr: $1 expected_results 
+
+48_y: OK regex: ((?s).)c(?!.) parsed_regex: ((?s).)c(?!.) str: a
+b
+c
+ result_expr: $1:$& expected_results 
+:
+c
+49_y: OK regex: ((?s)b.)c(?!.) parsed_regex: ((?s)b.)c(?!.) str: a
+b
+c
+ result_expr: $1 expected_results b
+
+50_y: OK regex: ((?s)b.)c(?!.) parsed_regex: ((?s)b.)c(?!.) str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+51_y: OK regex: ((?s)b.)c(?!\N) parsed_regex: ((?s)b.)c(?!\N) str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+52_y: OK regex: '(b.)c(?!\N)'s parsed_regex: '(b.)c(?!\N)'s str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+53_n: OK regex: a*(?!) parsed_regex: a*(?!) str: aaaab result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_19_lookahead.cpp.output b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-regex_19_lookahead.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_01_char_matcher.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-regex_01_char_matcher.cpp.execution
new file mode 100644
index 000000000..af124736e
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20/pure2-regex_01_char_matcher.cpp.execution
@@ -0,0 +1,14 @@
+Running tests_01_char_matcher:
+01_y: OK regex: abc parsed_regex: abc str: abc result_expr: $& expected_results abc
+02_y: OK regex: abc parsed_regex: abc str: abc result_expr: $-[0] expected_results 0
+03_y: OK regex: abc parsed_regex: abc str: abc result_expr: $+[0] expected_results 3
+04_n: OK regex: abc parsed_regex: abc str: xbc result_expr: - expected_results -
+05_n: OK regex: abc parsed_regex: abc str: axc result_expr: - expected_results -
+06_n: OK regex: abc parsed_regex: abc str: abx result_expr: - expected_results -
+07_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $& expected_results abc
+08_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $-[0] expected_results 1
+09_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $+[0] expected_results 4
+10_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $& expected_results abc
+11_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $-[0] expected_results 2
+12_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $+[0] expected_results 5
+
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_01_char_matcher.cpp.output b/regression-tests/test-results/clang-15-c++20/pure2-regex_01_char_matcher.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_02_ranges.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-regex_02_ranges.cpp.execution
new file mode 100644
index 000000000..dc0b36002
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20/pure2-regex_02_ranges.cpp.execution
@@ -0,0 +1,42 @@
+Running tests_02_ranges:
+01_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $& expected_results abc
+02_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $-[0] expected_results 0
+03_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $+[0] expected_results 3
+04_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $& expected_results abc
+05_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $-[0] expected_results 0
+06_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $+[0] expected_results 3
+07_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $& expected_results abbc
+08_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $-[0] expected_results 0
+09_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $+[0] expected_results 4
+10_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $& expected_results abbbbc
+11_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $-[0] expected_results 0
+12_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $+[0] expected_results 6
+13_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $& expected_results abbbbc
+14_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $-[0] expected_results 0
+15_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $+[0] expected_results 6
+16_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $& expected_results abbc
+17_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $-[0] expected_results 0
+18_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $+[0] expected_results 4
+19_n: OK regex: ab+bc parsed_regex: ab+bc str: abc result_expr: - expected_results -
+20_n: OK regex: ab+bc parsed_regex: ab+bc str: abq result_expr: - expected_results -
+21_n: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abq result_expr: - expected_results -
+22_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $& expected_results abbbbc
+23_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $-[0] expected_results 0
+24_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $+[0] expected_results 6
+25_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $& expected_results abbbbc
+26_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $-[0] expected_results 0
+27_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $+[0] expected_results 6
+28_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $& expected_results abbbbc
+29_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $-[0] expected_results 0
+30_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $+[0] expected_results 6
+31_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $& expected_results abbbbc
+32_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $-[0] expected_results 0
+33_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $+[0] expected_results 6
+34_n: OK regex: ab{4,5}bc parsed_regex: ab{4,5}bc str: abbbbc result_expr: - expected_results -
+35_y: OK regex: ab?bc parsed_regex: ab?bc str: abbc result_expr: $& expected_results abbc
+36_y: OK regex: ab?bc parsed_regex: ab?bc str: abc result_expr: $& expected_results abc
+37_y: OK regex: ab{0,1}bc parsed_regex: ab{0,1}bc str: abc result_expr: $& expected_results abc
+38_n: OK regex: ab?bc parsed_regex: ab?bc str: abbbbc result_expr: - expected_results -
+39_y: OK regex: ab?c parsed_regex: ab?c str: abc result_expr: $& expected_results abc
+40_y: OK regex: ab{0,1}c parsed_regex: ab{0,1}c str: abc result_expr: $& expected_results abc
+
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_02_ranges.cpp.output b/regression-tests/test-results/clang-15-c++20/pure2-regex_02_ranges.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_03_wildcard.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-regex_03_wildcard.cpp.execution
new file mode 100644
index 000000000..f3f0ea9cc
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20/pure2-regex_03_wildcard.cpp.execution
@@ -0,0 +1,22 @@
+Running tests_03_wildcard:
+01_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $& expected_results a
+02_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $-[0] expected_results 0
+03_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $+[0] expected_results 1
+04_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $& expected_results abbb
+05_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $-[0] expected_results 0
+06_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+07_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $& expected_results a
+08_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $-[0] expected_results 0
+09_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $+[0] expected_results 1
+10_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $& expected_results abbb
+11_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $-[0] expected_results 0
+12_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+13_y: OK Warning: Parsed regex does not match. regex: \N{ 3 , 4 } parsed_regex: \N{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+14_y: OK regex: a.c parsed_regex: a.c str: abc result_expr: $& expected_results abc
+15_y: OK regex: a.c parsed_regex: a.c str: axc result_expr: $& expected_results axc
+16_y: OK regex: a\Nc parsed_regex: a\Nc str: abc result_expr: $& expected_results abc
+17_y: OK regex: a.*c parsed_regex: a.*c str: axyzc result_expr: $& expected_results axyzc
+18_y: OK regex: a\N*c parsed_regex: a\N*c str: axyzc result_expr: $& expected_results axyzc
+19_n: OK regex: a.*c parsed_regex: a.*c str: axyzd result_expr: - expected_results -
+20_n: OK regex: a\N*c parsed_regex: a\N*c str: axyzd result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_03_wildcard.cpp.output b/regression-tests/test-results/clang-15-c++20/pure2-regex_03_wildcard.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_04_start_end.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-regex_04_start_end.cpp.execution
new file mode 100644
index 000000000..6fef36434
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20/pure2-regex_04_start_end.cpp.execution
@@ -0,0 +1,11 @@
+Running tests_04_start_end:
+01_y: OK regex: ^abc$ parsed_regex: ^abc$ str: abc result_expr: $& expected_results abc
+02_n: OK regex: ^abc$ parsed_regex: ^abc$ str: abcc result_expr: - expected_results -
+03_y: OK regex: ^abc parsed_regex: ^abc str: abcc result_expr: $& expected_results abc
+04_n: OK regex: ^abc$ parsed_regex: ^abc$ str: aabc result_expr: - expected_results -
+05_y: OK regex: abc$ parsed_regex: abc$ str: aabc result_expr: $& expected_results abc
+06_n: OK regex: abc$ parsed_regex: abc$ str: aabcd result_expr: - expected_results -
+07_y: OK regex: ^ parsed_regex: ^ str: abc result_expr: $& expected_results 
+08_y: OK regex: $ parsed_regex: $ str: abc result_expr: $& expected_results 
+09_n: OK regex: $b parsed_regex: $b str: b result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_04_start_end.cpp.output b/regression-tests/test-results/clang-15-c++20/pure2-regex_04_start_end.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_05_classes.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-regex_05_classes.cpp.execution
new file mode 100644
index 000000000..306bf3395
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20/pure2-regex_05_classes.cpp.execution
@@ -0,0 +1,21 @@
+Running tests_05_classes:
+01_n: OK regex: a[bc]d parsed_regex: a[bc]d str: abc result_expr: - expected_results -
+02_y: OK regex: a[bc]d parsed_regex: a[bc]d str: abd result_expr: $& expected_results abd
+03_y: OK regex: a[b]d parsed_regex: a[b]d str: abd result_expr: $& expected_results abd
+04_y: OK regex: [a][b][d] parsed_regex: [a][b][d] str: abd result_expr: $& expected_results abd
+05_y: OK regex: .[b]. parsed_regex: .[b]. str: abd result_expr: $& expected_results abd
+06_n: OK regex: .[b]. parsed_regex: .[b]. str: aBd result_expr: - expected_results -
+07_n: OK regex: a[b-d]e parsed_regex: a[b-d]e str: abd result_expr: - expected_results -
+08_y: OK regex: a[b-d]e parsed_regex: a[b-d]e str: ace result_expr: $& expected_results ace
+09_y: OK regex: a[b-d] parsed_regex: a[b-d] str: aac result_expr: $& expected_results ac
+10_y: OK regex: a[-b] parsed_regex: a[-b] str: a- result_expr: $& expected_results a-
+11_y: OK regex: a[b-] parsed_regex: a[b-] str: a- result_expr: $& expected_results a-
+12_y: OK regex: a] parsed_regex: a] str: a] result_expr: $& expected_results a]
+13_y: OK regex: a[]]b parsed_regex: a[]]b str: a]b result_expr: $& expected_results a]b
+14_y: OK regex: a[^bc]d parsed_regex: a[^bc]d str: aed result_expr: $& expected_results aed
+15_n: OK regex: a[^bc]d parsed_regex: a[^bc]d str: abd result_expr: - expected_results -
+16_y: OK regex: a[^-b]c parsed_regex: a[^-b]c str: adc result_expr: $& expected_results adc
+17_n: OK regex: a[^-b]c parsed_regex: a[^-b]c str: a-c result_expr: - expected_results -
+18_n: OK regex: a[^]b]c parsed_regex: a[^]b]c str: a]c result_expr: - expected_results -
+19_y: OK regex: a[^]b]c parsed_regex: a[^]b]c str: adc result_expr: $& expected_results adc
+
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_05_classes.cpp.output b/regression-tests/test-results/clang-15-c++20/pure2-regex_05_classes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_06_boundaries.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-regex_06_boundaries.cpp.execution
new file mode 100644
index 000000000..420a4c587
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20/pure2-regex_06_boundaries.cpp.execution
@@ -0,0 +1,19 @@
+Running tests_06_boundaries:
+01_y: OK regex: \ba\b parsed_regex: \ba\b str: a- result_expr: - expected_results -
+02_y: OK regex: \ba\b parsed_regex: \ba\b str: -a result_expr: - expected_results -
+03_y: OK regex: \ba\b parsed_regex: \ba\b str: -a- result_expr: - expected_results -
+04_n: OK regex: \by\b parsed_regex: \by\b str: xy result_expr: - expected_results -
+05_n: OK regex: \by\b parsed_regex: \by\b str: yz result_expr: - expected_results -
+06_n: OK regex: \by\b parsed_regex: \by\b str: xyz result_expr: - expected_results -
+07_n: OK regex: \Ba\B parsed_regex: \Ba\B str: a- result_expr: - expected_results -
+08_n: OK regex: \Ba\B parsed_regex: \Ba\B str: -a result_expr: - expected_results -
+09_n: OK regex: \Ba\B parsed_regex: \Ba\B str: -a- result_expr: - expected_results -
+10_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: - expected_results -
+11_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: $-[0] expected_results 1
+12_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: $+[0] expected_results 2
+13_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: - expected_results -
+14_y: OK regex: \by\B parsed_regex: \by\B str: yz result_expr: - expected_results -
+15_y: OK regex: \By\B parsed_regex: \By\B str: xyz result_expr: - expected_results -
+16_n: OK regex: \b parsed_regex: \b str:  result_expr: - expected_results -
+17_y: OK regex: \B parsed_regex: \B str:  result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_06_boundaries.cpp.output b/regression-tests/test-results/clang-15-c++20/pure2-regex_06_boundaries.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_07_short_classes.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-regex_07_short_classes.cpp.execution
new file mode 100644
index 000000000..519c05f92
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20/pure2-regex_07_short_classes.cpp.execution
@@ -0,0 +1,26 @@
+Running tests_07_short_classes:
+01_y: OK regex: \w parsed_regex: \w str: a result_expr: - expected_results -
+02_n: OK regex: \w parsed_regex: \w str: - result_expr: - expected_results -
+03_n: OK regex: \W parsed_regex: \W str: a result_expr: - expected_results -
+04_y: OK regex: \W parsed_regex: \W str: - result_expr: - expected_results -
+05_y: OK regex: a\sb parsed_regex: a\sb str: a b result_expr: - expected_results -
+06_n: OK regex: a\sb parsed_regex: a\sb str: a-b result_expr: - expected_results -
+07_n: OK regex: a\Sb parsed_regex: a\Sb str: a b result_expr: - expected_results -
+08_y: OK regex: a\Sb parsed_regex: a\Sb str: a-b result_expr: - expected_results -
+09_y: OK regex: \d parsed_regex: \d str: 1 result_expr: - expected_results -
+10_n: OK regex: \d parsed_regex: \d str: - result_expr: - expected_results -
+11_n: OK regex: \D parsed_regex: \D str: 1 result_expr: - expected_results -
+12_y: OK regex: \D parsed_regex: \D str: - result_expr: - expected_results -
+13_y: OK regex: [\w] parsed_regex: [\w] str: a result_expr: - expected_results -
+14_n: OK regex: [\w] parsed_regex: [\w] str: - result_expr: - expected_results -
+15_n: OK regex: [\W] parsed_regex: [\W] str: a result_expr: - expected_results -
+16_y: OK regex: [\W] parsed_regex: [\W] str: - result_expr: - expected_results -
+17_y: OK regex: a[\s]b parsed_regex: a[\s]b str: a b result_expr: - expected_results -
+18_n: OK regex: a[\s]b parsed_regex: a[\s]b str: a-b result_expr: - expected_results -
+19_n: OK regex: a[\S]b parsed_regex: a[\S]b str: a b result_expr: - expected_results -
+20_y: OK regex: a[\S]b parsed_regex: a[\S]b str: a-b result_expr: - expected_results -
+21_y: OK regex: [\d] parsed_regex: [\d] str: 1 result_expr: - expected_results -
+22_n: OK regex: [\d] parsed_regex: [\d] str: - result_expr: - expected_results -
+23_n: OK regex: [\D] parsed_regex: [\D] str: 1 result_expr: - expected_results -
+24_y: OK regex: [\D] parsed_regex: [\D] str: - result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_07_short_classes.cpp.output b/regression-tests/test-results/clang-15-c++20/pure2-regex_07_short_classes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_08_alternatives.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-regex_08_alternatives.cpp.execution
new file mode 100644
index 000000000..c12fd2afe
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20/pure2-regex_08_alternatives.cpp.execution
@@ -0,0 +1,4 @@
+Running tests_08_alternatives:
+01_y: OK regex: ab|cd parsed_regex: ab|cd str: abc result_expr: $& expected_results ab
+02_y: OK regex: ab|cd parsed_regex: ab|cd str: abcd result_expr: $& expected_results ab
+
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_08_alternatives.cpp.output b/regression-tests/test-results/clang-15-c++20/pure2-regex_08_alternatives.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_09_groups.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-regex_09_groups.cpp.execution
new file mode 100644
index 000000000..05df860f9
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20/pure2-regex_09_groups.cpp.execution
@@ -0,0 +1,13 @@
+Running tests_09_groups:
+01_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $&-$1 expected_results ef-
+02_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $-[0] expected_results 1
+03_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $+[0] expected_results 3
+04_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $-[1] expected_results 1
+05_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $+[1] expected_results 1
+06_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $&-$1-$2 expected_results a-a-a
+07_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $-[0]-$-[1]-$-[2] expected_results 0-0-0
+08_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $+[0]-$+[1]-$+[2] expected_results 1-1-1
+09_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $&-$1-$2 expected_results abc-a-c
+10_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $-[0]-$-[1]-$-[2] expected_results 0-0-2
+11_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $+[0]-$+[1]-$+[2] expected_results 3-1-3
+
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_09_groups.cpp.output b/regression-tests/test-results/clang-15-c++20/pure2-regex_09_groups.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_10_escapes.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-regex_10_escapes.cpp.execution
new file mode 100644
index 000000000..fe6e6efc9
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20/pure2-regex_10_escapes.cpp.execution
@@ -0,0 +1,39 @@
+Running tests_10_escapes:
+01_y: OK regex: a\(b parsed_regex: a\(b str: a(b result_expr: $&-$1 expected_results a(b-
+02_y: OK regex: a\(*b parsed_regex: a\(*b str: ab result_expr: $& expected_results ab
+03_y: OK regex: a\(*b parsed_regex: a\(*b str: a((b result_expr: $& expected_results a((b
+04_y: OK regex: a\\b parsed_regex: a\\b str: a\b result_expr: $& expected_results a\b
+05_y: OK regex: foo(\h+)bar parsed_regex: foo(\h+)bar str: foo	bar result_expr: $1 expected_results 	
+06_y: OK regex: (\H+)(\h) parsed_regex: (\H+)(\h) str: foo	bar result_expr: $1-$2 expected_results foo-	
+07_y: OK regex: (\h+)(\H) parsed_regex: (\h+)(\H) str: foo	bar result_expr: $1-$2 expected_results 	-b
+08_y: OK regex: foo(\h)bar parsed_regex: foo(\h)bar str: foo	bar result_expr: $1 expected_results 	
+09_y: OK regex: (\H)(\h) parsed_regex: (\H)(\h) str: foo	bar result_expr: $1-$2 expected_results o-	
+10_y: OK regex: (\h)(\H) parsed_regex: (\h)(\H) str: foo	bar result_expr: $1-$2 expected_results 	-b
+11_y: OK regex: foo(\v+)bar parsed_regex: foo(\v+)bar str: foo
+
+
+bar result_expr: $1 expected_results 
+
+
+
+12_y: OK regex: (\V+)(\v) parsed_regex: (\V+)(\v) str: foo
+
+
+bar result_expr: $1-$2 expected_results foo-
+13_y: OK regex: (\v+)(\V) parsed_regex: (\v+)(\V) str: foo
+
+
+bar result_expr: $1-$2 expected_results 
+
+
+-b
+14_y: OK regex: foo(\v)bar parsed_regex: foo(\v)bar str: foo
bar result_expr: $1 expected_results 
+15_y: OK regex: (\V)(\v) parsed_regex: (\V)(\v) str: foo
bar result_expr: $1-$2 expected_results o-
+16_y: OK regex: (\v)(\V) parsed_regex: (\v)(\V) str: foo
bar result_expr: $1-$2 expected_results 
-b
+17_y: OK regex: foo\t\n\r\f\a\ebar parsed_regex: foo\t\n\r\f\a\ebar str: foo	
+
bar result_expr: $& expected_results foo	
+
bar
+18_y: OK regex: foo\Kbar parsed_regex: foo\Kbar str: foobar result_expr: $& expected_results bar
+19_y: OK regex: \x41\x42 parsed_regex: \x41\x42 str: AB result_expr: $& expected_results AB
+20_y: OK regex: \101\o{102} parsed_regex: \101\o{102} str: AB result_expr: $& expected_results AB
+
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_10_escapes.cpp.output b/regression-tests/test-results/clang-15-c++20/pure2-regex_10_escapes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_11_group_references.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-regex_11_group_references.cpp.execution
new file mode 100644
index 000000000..724d0085a
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20/pure2-regex_11_group_references.cpp.execution
@@ -0,0 +1,26 @@
+Running tests_11_group_references:
+01_y: OK regex: (foo)(\g-2) parsed_regex: (foo)(\g-2) str: foofoo result_expr: $1-$2 expected_results foo-foo
+02_y: OK regex: (foo)(\g-2)(foo)(\g-2) parsed_regex: (foo)(\g-2)(foo)(\g-2) str: foofoofoofoo result_expr: $1-$2-$3-$4 expected_results foo-foo-foo-foo
+03_y: OK regex: (([abc]+) \g-1)(([abc]+) \g{-1}) parsed_regex: (([abc]+) \g-1)(([abc]+) \g{-1}) str: abc abccba cba result_expr: $2-$4 expected_results abc-cba
+04_y: OK regex: (a)(b)(c)\g1\g2\g3 parsed_regex: (a)(b)(c)\g1\g2\g3 str: abcabc result_expr: $1$2$3 expected_results abc
+05_y: OK regex: /(?'n'foo) \g{n}/ parsed_regex: /(?'n'foo) \g{n}/ str: ..foo foo.. result_expr: $1 expected_results foo
+06_y: OK regex: /(?'n'foo) \g{ n }/ parsed_regex: /(?'n'foo) \g{ n }/ str: ..foo foo.. result_expr: $1 expected_results foo
+07_yM: OK regex: /(?'n'foo) \g{n}/ parsed_regex: /(?'n'foo) \g{n}/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+08_y: OK regex: /(?<n>foo) \g{n}/ parsed_regex: /(?<n>foo) \g{n}/ str: ..foo foo.. result_expr: $1 expected_results foo
+09_yM: OK regex: /(?<n>foo) \g{n}/ parsed_regex: /(?<n>foo) \g{n}/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+10_y: OK regex: /(?<as>as) (\w+) \g{as} (\w+)/ parsed_regex: /(?<as>as) (\w+) \g{as} (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+11_y: OK regex: /(?'n'foo) \k<n>/ parsed_regex: /(?'n'foo) \k<n>/ str: ..foo foo.. result_expr: $1 expected_results foo
+12_yM: OK regex: /(?'n'foo) \k<n>/ parsed_regex: /(?'n'foo) \k<n>/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+13_y: OK regex: /(?<n>foo) \k'n'/ parsed_regex: /(?<n>foo) \k'n'/ str: ..foo foo.. result_expr: $1 expected_results foo
+14_yM: OK regex: /(?<n>foo) \k'n'/ parsed_regex: /(?<n>foo) \k'n'/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+15_yM: OK regex: /(?'a1'foo) \k'a1'/ parsed_regex: /(?'a1'foo) \k'a1'/ str: ..foo foo.. result_expr: $+{a1} expected_results foo
+16_yM: OK regex: /(?<a1>foo) \k<a1>/ parsed_regex: /(?<a1>foo) \k<a1>/ str: ..foo foo.. result_expr: $+{a1} expected_results foo
+17_yM: OK regex: /(?'_'foo) \k'_'/ parsed_regex: /(?'_'foo) \k'_'/ str: ..foo foo.. result_expr: $+{_} expected_results foo
+18_yM: OK regex: /(?<_>foo) \k<_>/ parsed_regex: /(?<_>foo) \k<_>/ str: ..foo foo.. result_expr: $+{_} expected_results foo
+19_yM: OK regex: /(?'_0_'foo) \k'_0_'/ parsed_regex: /(?'_0_'foo) \k'_0_'/ str: ..foo foo.. result_expr: $+{_0_} expected_results foo
+20_yM: OK regex: /(?<_0_>foo) \k<_0_>/ parsed_regex: /(?<_0_>foo) \k<_0_>/ str: ..foo foo.. result_expr: $+{_0_} expected_results foo
+21_y: OK regex: /(?<as>as) (\w+) \k<as> (\w+)/ parsed_regex: /(?<as>as) (\w+) \k<as> (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+22_y: OK regex: /(?<as>as) (\w+) \k{as} (\w+)/ parsed_regex: /(?<as>as) (\w+) \k{as} (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+23_y: OK regex: /(?<as>as) (\w+) \k'as' (\w+)/ parsed_regex: /(?<as>as) (\w+) \k'as' (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+24_y: OK regex: /(?<as>as) (\w+) \k{ as } (\w+)/ parsed_regex: /(?<as>as) (\w+) \k{ as } (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_11_group_references.cpp.output b/regression-tests/test-results/clang-15-c++20/pure2-regex_11_group_references.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_12_case_insensitive.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-regex_12_case_insensitive.cpp.execution
new file mode 100644
index 000000000..4939deb24
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20/pure2-regex_12_case_insensitive.cpp.execution
@@ -0,0 +1,121 @@
+Running tests_12_case_insensitive:
+01_y: OK regex: 'abc'i parsed_regex: 'abc'i str: ABC result_expr: $& expected_results ABC
+02_n: OK regex: 'abc'i parsed_regex: 'abc'i str: XBC result_expr: - expected_results -
+03_n: OK regex: 'abc'i parsed_regex: 'abc'i str: AXC result_expr: - expected_results -
+04_n: OK regex: 'abc'i parsed_regex: 'abc'i str: ABX result_expr: - expected_results -
+05_y: OK regex: 'abc'i parsed_regex: 'abc'i str: XABCY result_expr: $& expected_results ABC
+06_y: OK regex: 'abc'i parsed_regex: 'abc'i str: ABABC result_expr: $& expected_results ABC
+07_y: OK regex: 'ab*c'i parsed_regex: 'ab*c'i str: ABC result_expr: $& expected_results ABC
+08_y: OK regex: 'ab*bc'i parsed_regex: 'ab*bc'i str: ABC result_expr: $& expected_results ABC
+09_y: OK regex: 'ab*bc'i parsed_regex: 'ab*bc'i str: ABBC result_expr: $& expected_results ABBC
+10_y: OK regex: 'ab*?bc'i parsed_regex: 'ab*?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+11_y: OK regex: 'ab{0,}?bc'i parsed_regex: 'ab{0,}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+12_y: OK regex: 'ab+?bc'i parsed_regex: 'ab+?bc'i str: ABBC result_expr: $& expected_results ABBC
+13_n: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABC result_expr: - expected_results -
+14_n: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABQ result_expr: - expected_results -
+15_n: OK regex: 'ab{1,}bc'i parsed_regex: 'ab{1,}bc'i str: ABQ result_expr: - expected_results -
+16_y: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+17_y: OK regex: 'ab{1,}?bc'i parsed_regex: 'ab{1,}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+18_y: OK regex: 'ab{1,3}?bc'i parsed_regex: 'ab{1,3}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+19_y: OK regex: 'ab{3,4}?bc'i parsed_regex: 'ab{3,4}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+20_n: OK regex: 'ab{4,5}?bc'i parsed_regex: 'ab{4,5}?bc'i str: ABBBBC result_expr: - expected_results -
+21_y: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABBC result_expr: $& expected_results ABBC
+22_y: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABC result_expr: $& expected_results ABC
+23_y: OK regex: 'ab{0,1}?bc'i parsed_regex: 'ab{0,1}?bc'i str: ABC result_expr: $& expected_results ABC
+24_n: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABBBBC result_expr: - expected_results -
+25_y: OK regex: 'ab??c'i parsed_regex: 'ab??c'i str: ABC result_expr: $& expected_results ABC
+26_y: OK regex: 'ab{0,1}?c'i parsed_regex: 'ab{0,1}?c'i str: ABC result_expr: $& expected_results ABC
+27_y: OK regex: '^abc$'i parsed_regex: '^abc$'i str: ABC result_expr: $& expected_results ABC
+28_n: OK regex: '^abc$'i parsed_regex: '^abc$'i str: ABCC result_expr: - expected_results -
+29_y: OK regex: '^abc'i parsed_regex: '^abc'i str: ABCC result_expr: $& expected_results ABC
+30_n: OK regex: '^abc$'i parsed_regex: '^abc$'i str: AABC result_expr: - expected_results -
+31_y: OK regex: 'abc$'i parsed_regex: 'abc$'i str: AABC result_expr: $& expected_results ABC
+32_y: OK regex: '^'i parsed_regex: '^'i str: ABC result_expr: $& expected_results 
+33_y: OK regex: '$'i parsed_regex: '$'i str: ABC result_expr: $& expected_results 
+34_y: OK regex: 'a.c'i parsed_regex: 'a.c'i str: ABC result_expr: $& expected_results ABC
+35_y: OK regex: 'a.c'i parsed_regex: 'a.c'i str: AXC result_expr: $& expected_results AXC
+36_y: OK regex: 'a\Nc'i parsed_regex: 'a\Nc'i str: ABC result_expr: $& expected_results ABC
+37_y: OK regex: 'a.*?c'i parsed_regex: 'a.*?c'i str: AXYZC result_expr: $& expected_results AXYZC
+38_n: OK regex: 'a.*c'i parsed_regex: 'a.*c'i str: AXYZD result_expr: - expected_results -
+39_n: OK regex: 'a[bc]d'i parsed_regex: 'a[bc]d'i str: ABC result_expr: - expected_results -
+40_y: OK regex: 'a[bc]d'i parsed_regex: 'a[bc]d'i str: ABD result_expr: $& expected_results ABD
+41_n: OK regex: 'a[b-d]e'i parsed_regex: 'a[b-d]e'i str: ABD result_expr: - expected_results -
+42_y: OK regex: 'a[b-d]e'i parsed_regex: 'a[b-d]e'i str: ACE result_expr: $& expected_results ACE
+43_y: OK regex: 'a[b-d]'i parsed_regex: 'a[b-d]'i str: AAC result_expr: $& expected_results AC
+44_y: OK regex: 'a[-b]'i parsed_regex: 'a[-b]'i str: A- result_expr: $& expected_results A-
+45_y: OK regex: 'a[b-]'i parsed_regex: 'a[b-]'i str: A- result_expr: $& expected_results A-
+46_y: OK regex: 'a]'i parsed_regex: 'a]'i str: A] result_expr: $& expected_results A]
+47_y: OK regex: 'a[]]b'i parsed_regex: 'a[]]b'i str: A]B result_expr: $& expected_results A]B
+48_y: OK regex: 'a[^bc]d'i parsed_regex: 'a[^bc]d'i str: AED result_expr: $& expected_results AED
+49_n: OK regex: 'a[^bc]d'i parsed_regex: 'a[^bc]d'i str: ABD result_expr: - expected_results -
+50_y: OK regex: 'a[^-b]c'i parsed_regex: 'a[^-b]c'i str: ADC result_expr: $& expected_results ADC
+51_n: OK regex: 'a[^-b]c'i parsed_regex: 'a[^-b]c'i str: A-C result_expr: - expected_results -
+52_n: OK regex: 'a[^]b]c'i parsed_regex: 'a[^]b]c'i str: A]C result_expr: - expected_results -
+53_y: OK regex: 'a[^]b]c'i parsed_regex: 'a[^]b]c'i str: ADC result_expr: $& expected_results ADC
+54_y: OK regex: 'ab|cd'i parsed_regex: 'ab|cd'i str: ABC result_expr: $& expected_results AB
+55_y: OK regex: 'ab|cd'i parsed_regex: 'ab|cd'i str: ABCD result_expr: $& expected_results AB
+56_y: OK regex: '()ef'i parsed_regex: '()ef'i str: DEF result_expr: $&-$1 expected_results EF-
+57_n: OK regex: '$b'i parsed_regex: '$b'i str: B result_expr: - expected_results -
+58_y: OK regex: 'a\(b'i parsed_regex: 'a\(b'i str: A(B result_expr: $&-$1 expected_results A(B-
+59_y: OK regex: 'a\(*b'i parsed_regex: 'a\(*b'i str: AB result_expr: $& expected_results AB
+60_y: OK regex: 'a\(*b'i parsed_regex: 'a\(*b'i str: A((B result_expr: $& expected_results A((B
+61_y: OK regex: 'a\\b'i parsed_regex: 'a\\b'i str: A\B result_expr: $& expected_results A\B
+62_y: OK regex: '((a))'i parsed_regex: '((a))'i str: ABC result_expr: $&-$1-$2 expected_results A-A-A
+63_y: OK regex: '(a)b(c)'i parsed_regex: '(a)b(c)'i str: ABC result_expr: $&-$1-$2 expected_results ABC-A-C
+64_y: OK regex: 'a+b+c'i parsed_regex: 'a+b+c'i str: AABBABC result_expr: $& expected_results ABC
+65_y: OK regex: 'a{1,}b{1,}c'i parsed_regex: 'a{1,}b{1,}c'i str: AABBABC result_expr: $& expected_results ABC
+66_y: OK regex: 'a.+?c'i parsed_regex: 'a.+?c'i str: ABCABC result_expr: $& expected_results ABC
+67_y: OK regex: 'a.*?c'i parsed_regex: 'a.*?c'i str: ABCABC result_expr: $& expected_results ABC
+68_y: OK regex: 'a.{0,5}?c'i parsed_regex: 'a.{0,5}?c'i str: ABCABC result_expr: $& expected_results ABC
+69_y: OK regex: '(a+|b)*'i parsed_regex: '(a+|b)*'i str: AB result_expr: $&-$1 expected_results AB-B
+70_y: OK regex: '(a+|b){0,}'i parsed_regex: '(a+|b){0,}'i str: AB result_expr: $&-$1 expected_results AB-B
+71_y: OK regex: '(a+|b)+'i parsed_regex: '(a+|b)+'i str: AB result_expr: $&-$1 expected_results AB-B
+72_y: OK regex: '(a+|b){1,}'i parsed_regex: '(a+|b){1,}'i str: AB result_expr: $&-$1 expected_results AB-B
+73_y: OK regex: '(a+|b)?'i parsed_regex: '(a+|b)?'i str: AB result_expr: $&-$1 expected_results A-A
+74_y: OK regex: '(a+|b){0,1}'i parsed_regex: '(a+|b){0,1}'i str: AB result_expr: $&-$1 expected_results A-A
+75_y: OK regex: '(a+|b){0,1}?'i parsed_regex: '(a+|b){0,1}?'i str: AB result_expr: $&-$1 expected_results -
+76_y: OK regex: '[^ab]*'i parsed_regex: '[^ab]*'i str: CDE result_expr: $& expected_results CDE
+77_n: OK regex: 'abc'i parsed_regex: 'abc'i str:  result_expr: - expected_results -
+78_y: OK regex: 'a*'i parsed_regex: 'a*'i str:  result_expr: $& expected_results 
+79_y: OK regex: '([abc])*d'i parsed_regex: '([abc])*d'i str: ABBBCD result_expr: $&-$1 expected_results ABBBCD-C
+80_y: OK regex: '([abc])*bcd'i parsed_regex: '([abc])*bcd'i str: ABCD result_expr: $&-$1 expected_results ABCD-A
+81_y: OK regex: 'a|b|c|d|e'i parsed_regex: 'a|b|c|d|e'i str: E result_expr: $& expected_results E
+82_y: OK regex: '(a|b|c|d|e)f'i parsed_regex: '(a|b|c|d|e)f'i str: EF result_expr: $&-$1 expected_results EF-E
+83_y: OK regex: 'abcd*efg'i parsed_regex: 'abcd*efg'i str: ABCDEFG result_expr: $& expected_results ABCDEFG
+84_y: OK regex: 'ab*'i parsed_regex: 'ab*'i str: XABYABBBZ result_expr: $& expected_results AB
+85_y: OK regex: 'ab*'i parsed_regex: 'ab*'i str: XAYABBBZ result_expr: $& expected_results A
+86_y: OK regex: '(ab|cd)e'i parsed_regex: '(ab|cd)e'i str: ABCDE result_expr: $&-$1 expected_results CDE-CD
+87_y: OK regex: '[abhgefdc]ij'i parsed_regex: '[abhgefdc]ij'i str: HIJ result_expr: $& expected_results HIJ
+88_n: OK regex: '^(ab|cd)e'i parsed_regex: '^(ab|cd)e'i str: ABCDE result_expr: x$1y expected_results XY
+89_y: OK regex: '(abc|)ef'i parsed_regex: '(abc|)ef'i str: ABCDEF result_expr: $&-$1 expected_results EF-
+90_y: OK regex: '(a|b)c*d'i parsed_regex: '(a|b)c*d'i str: ABCD result_expr: $&-$1 expected_results BCD-B
+91_y: OK regex: '(ab|ab*)bc'i parsed_regex: '(ab|ab*)bc'i str: ABC result_expr: $&-$1 expected_results ABC-A
+92_y: OK regex: 'a([bc]*)c*'i parsed_regex: 'a([bc]*)c*'i str: ABC result_expr: $&-$1 expected_results ABC-BC
+93_y: OK regex: 'a([bc]*)(c*d)'i parsed_regex: 'a([bc]*)(c*d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-BC-D
+94_y: OK regex: 'a([bc]+)(c*d)'i parsed_regex: 'a([bc]+)(c*d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-BC-D
+95_y: OK regex: 'a([bc]*)(c+d)'i parsed_regex: 'a([bc]*)(c+d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-B-CD
+96_y: OK regex: 'a[bcd]*dcdcde'i parsed_regex: 'a[bcd]*dcdcde'i str: ADCDCDE result_expr: $& expected_results ADCDCDE
+97_n: OK regex: 'a[bcd]+dcdcde'i parsed_regex: 'a[bcd]+dcdcde'i str: ADCDCDE result_expr: - expected_results -
+98_y: OK regex: '(ab|a)b*c'i parsed_regex: '(ab|a)b*c'i str: ABC result_expr: $&-$1 expected_results ABC-AB
+99_y: OK regex: '((a)(b)c)(d)'i parsed_regex: '((a)(b)c)(d)'i str: ABCD result_expr: $1-$2-$3-$4 expected_results ABC-A-B-D
+100_y: OK regex: '[a-zA-Z_][a-zA-Z0-9_]*'i parsed_regex: '[a-zA-Z_][a-zA-Z0-9_]*'i str: ALPHA result_expr: $& expected_results ALPHA
+101_y: OK regex: '^a(bc+|b[eh])g|.h$'i parsed_regex: '^a(bc+|b[eh])g|.h$'i str: ABH result_expr: $&-$1 expected_results BH-
+102_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: EFFGZ result_expr: $&-$1-$2 expected_results EFFGZ-EFFGZ-
+103_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: IJ result_expr: $&-$1-$2 expected_results IJ-IJ-J
+104_n: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: EFFG result_expr: - expected_results -
+105_n: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: BCDD result_expr: - expected_results -
+106_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: REFFGZ result_expr: $&-$1-$2 expected_results EFFGZ-EFFGZ-
+107_y: OK regex: '((((((((((a))))))))))'i parsed_regex: '((((((((((a))))))))))'i str: A result_expr: $10 expected_results A
+108_y: OK regex: '((((((((((a))))))))))\10'i parsed_regex: '((((((((((a))))))))))\10'i str: AA result_expr: $& expected_results AA
+109_y: OK regex: '(((((((((a)))))))))'i parsed_regex: '(((((((((a)))))))))'i str: A result_expr: $& expected_results A
+110_n: OK regex: 'multiple words of text'i parsed_regex: 'multiple words of text'i str: UH-UH result_expr: - expected_results -
+111_y: OK regex: 'multiple words'i parsed_regex: 'multiple words'i str: MULTIPLE WORDS, YEAH result_expr: $& expected_results MULTIPLE WORDS
+112_y: OK regex: '(.*)c(.*)'i parsed_regex: '(.*)c(.*)'i str: ABCDE result_expr: $&-$1-$2 expected_results ABCDE-AB-DE
+113_y: OK regex: '\((.*), (.*)\)'i parsed_regex: '\((.*), (.*)\)'i str: (A, B) result_expr: ($2, $1) expected_results (B, A)
+114_n: OK regex: '[k]'i parsed_regex: '[k]'i str: AB result_expr: - expected_results -
+115_y: OK regex: 'abcd'i parsed_regex: 'abcd'i str: ABCD result_expr: $& expected_results ABCD
+116_y: OK regex: 'a(bc)d'i parsed_regex: 'a(bc)d'i str: ABCD result_expr: $1 expected_results BC
+117_y: OK regex: 'a[-]?c'i parsed_regex: 'a[-]?c'i str: AC result_expr: $& expected_results AC
+118_y: OK regex: '(abc)\1'i parsed_regex: '(abc)\1'i str: ABCABC result_expr: $1 expected_results ABC
+119_y: OK regex: '([a-c]*)\1'i parsed_regex: '([a-c]*)\1'i str: ABCABC result_expr: $1 expected_results ABC
+
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_12_case_insensitive.cpp.output b/regression-tests/test-results/clang-15-c++20/pure2-regex_12_case_insensitive.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_13_posessive_modifier.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-regex_13_posessive_modifier.cpp.execution
new file mode 100644
index 000000000..916d1a084
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20/pure2-regex_13_posessive_modifier.cpp.execution
@@ -0,0 +1,50 @@
+Running tests_13_posessive_modifier:
+01_n: OK regex: a++a parsed_regex: a++a str: aaaaa result_expr: - expected_results -
+02_n: OK regex: a*+a parsed_regex: a*+a str: aaaaa result_expr: - expected_results -
+03_n: OK regex: a{1,5}+a parsed_regex: a{1,5}+a str: aaaaa result_expr: - expected_results -
+04_n: OK regex: a?+a parsed_regex: a?+a str: ab result_expr: - expected_results -
+05_y: OK regex: a++b parsed_regex: a++b str: aaaaab result_expr: $& expected_results aaaaab
+06_y: OK regex: a*+b parsed_regex: a*+b str: aaaaab result_expr: $& expected_results aaaaab
+07_y: OK regex: a{1,5}+b parsed_regex: a{1,5}+b str: aaaaab result_expr: $& expected_results aaaaab
+08_y: OK regex: a?+b parsed_regex: a?+b str: ab result_expr: $& expected_results ab
+09_n: OK regex: fooa++a parsed_regex: fooa++a str: fooaaaaa result_expr: - expected_results -
+10_n: OK regex: fooa*+a parsed_regex: fooa*+a str: fooaaaaa result_expr: - expected_results -
+11_n: OK regex: fooa{1,5}+a parsed_regex: fooa{1,5}+a str: fooaaaaa result_expr: - expected_results -
+12_n: OK regex: fooa?+a parsed_regex: fooa?+a str: fooab result_expr: - expected_results -
+13_y: OK regex: fooa++b parsed_regex: fooa++b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+14_y: OK regex: fooa*+b parsed_regex: fooa*+b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+15_y: OK regex: fooa{1,5}+b parsed_regex: fooa{1,5}+b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+16_y: OK regex: fooa?+b parsed_regex: fooa?+b str: fooab result_expr: $& expected_results fooab
+17_n: OK regex: (aA)++(aA) parsed_regex: (aA)++(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+18_n: OK regex: (aA|bB)++(aA|bB) parsed_regex: (aA|bB)++(aA|bB) str: aAaAbBaAbB result_expr: - expected_results aAaAbBaAbB
+19_n: OK regex: (aA)*+(aA) parsed_regex: (aA)*+(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+20_n: OK regex: (aA|bB)*+(aA|bB) parsed_regex: (aA|bB)*+(aA|bB) str: aAaAbBaAaA result_expr: - expected_results aAaAbBaAaA
+21_n: OK regex: (aA){1,5}+(aA) parsed_regex: (aA){1,5}+(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+22_n: OK regex: (aA|bB){1,5}+(aA|bB) parsed_regex: (aA|bB){1,5}+(aA|bB) str: aAaAbBaAaA result_expr: - expected_results aAaAbBaAaA
+23_n: OK regex: (aA)?+(aA) parsed_regex: (aA)?+(aA) str: aAb result_expr: - expected_results aAb
+24_n: OK regex: (aA|bB)?+(aA|bB) parsed_regex: (aA|bB)?+(aA|bB) str: bBb result_expr: - expected_results bBb
+25_y: OK regex: (aA)++b parsed_regex: (aA)++b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+26_y: OK regex: (aA|bB)++b parsed_regex: (aA|bB)++b str: aAbBaAaAbBb result_expr: $& expected_results aAbBaAaAbBb
+27_y: OK regex: (aA)*+b parsed_regex: (aA)*+b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+28_y: OK regex: (aA|bB)*+b parsed_regex: (aA|bB)*+b str: bBbBbBbBbBb result_expr: $& expected_results bBbBbBbBbBb
+29_y: OK regex: (aA){1,5}+b parsed_regex: (aA){1,5}+b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+30_y: OK regex: (aA|bB){1,5}+b parsed_regex: (aA|bB){1,5}+b str: bBaAbBaAbBb result_expr: $& expected_results bBaAbBaAbBb
+31_y: OK regex: (aA)?+b parsed_regex: (aA)?+b str: aAb result_expr: $& expected_results aAb
+32_y: OK regex: (aA|bB)?+b parsed_regex: (aA|bB)?+b str: bBb result_expr: $& expected_results bBb
+33_n: OK regex: foo(aA)++(aA) parsed_regex: foo(aA)++(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+34_n: OK regex: foo(aA|bB)++(aA|bB) parsed_regex: foo(aA|bB)++(aA|bB) str: foobBbBbBaAaA result_expr: - expected_results foobBbBbBaAaA
+35_n: OK regex: foo(aA)*+(aA) parsed_regex: foo(aA)*+(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+36_n: OK regex: foo(aA|bB)*+(aA|bB) parsed_regex: foo(aA|bB)*+(aA|bB) str: foobBaAbBaAaA result_expr: - expected_results foobBaAbBaAaA
+37_n: OK regex: foo(aA){1,5}+(aA) parsed_regex: foo(aA){1,5}+(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+38_n: OK regex: foo(aA|bB){1,5}+(aA|bB) parsed_regex: foo(aA|bB){1,5}+(aA|bB) str: fooaAbBbBaAaA result_expr: - expected_results fooaAbBbBaAaA
+39_n: OK regex: foo(aA)?+(aA) parsed_regex: foo(aA)?+(aA) str: fooaAb result_expr: - expected_results fooaAb
+40_n: OK regex: foo(aA|bB)?+(aA|bB) parsed_regex: foo(aA|bB)?+(aA|bB) str: foobBb result_expr: - expected_results foobBb
+41_y: OK regex: foo(aA)++b parsed_regex: foo(aA)++b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+42_y: OK regex: foo(aA|bB)++b parsed_regex: foo(aA|bB)++b str: foobBaAbBaAbBb result_expr: $& expected_results foobBaAbBaAbBb
+43_y: OK regex: foo(aA)*+b parsed_regex: foo(aA)*+b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+44_y: OK regex: foo(aA|bB)*+b parsed_regex: foo(aA|bB)*+b str: foobBbBaAaAaAb result_expr: $& expected_results foobBbBaAaAaAb
+45_y: OK regex: foo(aA){1,5}+b parsed_regex: foo(aA){1,5}+b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+46_y: OK regex: foo(aA|bB){1,5}+b parsed_regex: foo(aA|bB){1,5}+b str: foobBaAaAaAaAb result_expr: $& expected_results foobBaAaAaAaAb
+47_y: OK regex: foo(aA)?+b parsed_regex: foo(aA)?+b str: fooaAb result_expr: $& expected_results fooaAb
+48_y: OK regex: foo(aA|bB)?+b parsed_regex: foo(aA|bB)?+b str: foobBb result_expr: $& expected_results foobBb
+
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_13_posessive_modifier.cpp.output b/regression-tests/test-results/clang-15-c++20/pure2-regex_13_posessive_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_14_multiline_modifier.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-regex_14_multiline_modifier.cpp.execution
new file mode 100644
index 000000000..9a12081ac
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20/pure2-regex_14_multiline_modifier.cpp.execution
@@ -0,0 +1,533 @@
+Running tests_14_multiline_modifier:
+01_y: OK regex: \Z parsed_regex: \Z str: a
+b
+ result_expr: $-[0] expected_results 3
+02_y: OK regex: \z parsed_regex: \z str: a
+b
+ result_expr: $-[0] expected_results 4
+03_y: OK regex: $ parsed_regex: $ str: a
+b
+ result_expr: $-[0] expected_results 3
+04_y: OK regex: \Z parsed_regex: \Z str: b
+a
+ result_expr: $-[0] expected_results 3
+05_y: OK regex: \z parsed_regex: \z str: b
+a
+ result_expr: $-[0] expected_results 4
+06_y: OK regex: $ parsed_regex: $ str: b
+a
+ result_expr: $-[0] expected_results 3
+07_y: OK regex: \Z parsed_regex: \Z str: b
+a result_expr: $-[0] expected_results 3
+08_y: OK regex: \z parsed_regex: \z str: b
+a result_expr: $-[0] expected_results 3
+09_y: OK regex: $ parsed_regex: $ str: b
+a result_expr: $-[0] expected_results 3
+10_y: OK regex: '\Z'm parsed_regex: '\Z'm str: a
+b
+ result_expr: $-[0] expected_results 3
+11_y: OK regex: '\z'm parsed_regex: '\z'm str: a
+b
+ result_expr: $-[0] expected_results 4
+12_y: OK regex: '$'m parsed_regex: '$'m str: a
+b
+ result_expr: $-[0] expected_results 1
+13_y: OK regex: '\Z'm parsed_regex: '\Z'm str: b
+a
+ result_expr: $-[0] expected_results 3
+14_y: OK regex: '\z'm parsed_regex: '\z'm str: b
+a
+ result_expr: $-[0] expected_results 4
+15_y: OK regex: '$'m parsed_regex: '$'m str: b
+a
+ result_expr: $-[0] expected_results 1
+16_y: OK regex: '\Z'm parsed_regex: '\Z'm str: b
+a result_expr: $-[0] expected_results 3
+17_y: OK regex: '\z'm parsed_regex: '\z'm str: b
+a result_expr: $-[0] expected_results 3
+18_y: OK regex: '$'m parsed_regex: '$'m str: b
+a result_expr: $-[0] expected_results 1
+19_n: OK regex: a\Z parsed_regex: a\Z str: a
+b
+ result_expr: - expected_results -
+20_n: OK regex: a\z parsed_regex: a\z str: a
+b
+ result_expr: - expected_results -
+21_n: OK regex: a$ parsed_regex: a$ str: a
+b
+ result_expr: - expected_results -
+22_y: OK regex: a\Z parsed_regex: a\Z str: b
+a
+ result_expr: $-[0] expected_results 2
+23_n: OK regex: a\z parsed_regex: a\z str: b
+a
+ result_expr: - expected_results -
+24_y: OK regex: a$ parsed_regex: a$ str: b
+a
+ result_expr: $-[0] expected_results 2
+25_y: OK regex: a\Z parsed_regex: a\Z str: b
+a result_expr: $-[0] expected_results 2
+26_y: OK regex: a\z parsed_regex: a\z str: b
+a result_expr: $-[0] expected_results 2
+27_y: OK regex: a$ parsed_regex: a$ str: b
+a result_expr: $-[0] expected_results 2
+28_n: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: a
+b
+ result_expr: - expected_results -
+29_n: OK regex: 'a\z'm parsed_regex: 'a\z'm str: a
+b
+ result_expr: - expected_results -
+30_y: OK regex: 'a$'m parsed_regex: 'a$'m str: a
+b
+ result_expr: $-[0] expected_results 0
+31_y: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: b
+a
+ result_expr: $-[0] expected_results 2
+32_n: OK regex: 'a\z'm parsed_regex: 'a\z'm str: b
+a
+ result_expr: - expected_results -
+33_y: OK regex: 'a$'m parsed_regex: 'a$'m str: b
+a
+ result_expr: $-[0] expected_results 2
+34_y: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: b
+a result_expr: $-[0] expected_results 2
+35_y: OK regex: 'a\z'm parsed_regex: 'a\z'm str: b
+a result_expr: $-[0] expected_results 2
+36_y: OK regex: 'a$'m parsed_regex: 'a$'m str: b
+a result_expr: $-[0] expected_results 2
+37_n: OK regex: aa\Z parsed_regex: aa\Z str: aa
+b
+ result_expr: - expected_results -
+38_n: OK regex: aa\z parsed_regex: aa\z str: aa
+b
+ result_expr: - expected_results -
+39_n: OK regex: aa$ parsed_regex: aa$ str: aa
+b
+ result_expr: - expected_results -
+40_y: OK regex: aa\Z parsed_regex: aa\Z str: b
+aa
+ result_expr: $-[0] expected_results 2
+41_n: OK regex: aa\z parsed_regex: aa\z str: b
+aa
+ result_expr: - expected_results -
+42_y: OK regex: aa$ parsed_regex: aa$ str: b
+aa
+ result_expr: $-[0] expected_results 2
+43_y: OK regex: aa\Z parsed_regex: aa\Z str: b
+aa result_expr: $-[0] expected_results 2
+44_y: OK regex: aa\z parsed_regex: aa\z str: b
+aa result_expr: $-[0] expected_results 2
+45_y: OK regex: aa$ parsed_regex: aa$ str: b
+aa result_expr: $-[0] expected_results 2
+46_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: aa
+b
+ result_expr: - expected_results -
+47_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: aa
+b
+ result_expr: - expected_results -
+48_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: aa
+b
+ result_expr: $-[0] expected_results 0
+49_y: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+aa
+ result_expr: $-[0] expected_results 2
+50_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+aa
+ result_expr: - expected_results -
+51_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+aa
+ result_expr: $-[0] expected_results 2
+52_y: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+aa result_expr: $-[0] expected_results 2
+53_y: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+aa result_expr: $-[0] expected_results 2
+54_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+aa result_expr: $-[0] expected_results 2
+55_n: OK regex: aa\Z parsed_regex: aa\Z str: ac
+b
+ result_expr: - expected_results -
+56_n: OK regex: aa\z parsed_regex: aa\z str: ac
+b
+ result_expr: - expected_results -
+57_n: OK regex: aa$ parsed_regex: aa$ str: ac
+b
+ result_expr: - expected_results -
+58_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ac
+ result_expr: - expected_results -
+59_n: OK regex: aa\z parsed_regex: aa\z str: b
+ac
+ result_expr: - expected_results -
+60_n: OK regex: aa$ parsed_regex: aa$ str: b
+ac
+ result_expr: - expected_results -
+61_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ac result_expr: - expected_results -
+62_n: OK regex: aa\z parsed_regex: aa\z str: b
+ac result_expr: - expected_results -
+63_n: OK regex: aa$ parsed_regex: aa$ str: b
+ac result_expr: - expected_results -
+64_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: ac
+b
+ result_expr: - expected_results -
+65_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: ac
+b
+ result_expr: - expected_results -
+66_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: ac
+b
+ result_expr: - expected_results -
+67_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ac
+ result_expr: - expected_results -
+68_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ac
+ result_expr: - expected_results -
+69_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ac
+ result_expr: - expected_results -
+70_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ac result_expr: - expected_results -
+71_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ac result_expr: - expected_results -
+72_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ac result_expr: - expected_results -
+73_n: OK regex: aa\Z parsed_regex: aa\Z str: ca
+b
+ result_expr: - expected_results -
+74_n: OK regex: aa\z parsed_regex: aa\z str: ca
+b
+ result_expr: - expected_results -
+75_n: OK regex: aa$ parsed_regex: aa$ str: ca
+b
+ result_expr: - expected_results -
+76_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ca
+ result_expr: - expected_results -
+77_n: OK regex: aa\z parsed_regex: aa\z str: b
+ca
+ result_expr: - expected_results -
+78_n: OK regex: aa$ parsed_regex: aa$ str: b
+ca
+ result_expr: - expected_results -
+79_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ca result_expr: - expected_results -
+80_n: OK regex: aa\z parsed_regex: aa\z str: b
+ca result_expr: - expected_results -
+81_n: OK regex: aa$ parsed_regex: aa$ str: b
+ca result_expr: - expected_results -
+82_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: ca
+b
+ result_expr: - expected_results -
+83_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: ca
+b
+ result_expr: - expected_results -
+84_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: ca
+b
+ result_expr: - expected_results -
+85_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ca
+ result_expr: - expected_results -
+86_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ca
+ result_expr: - expected_results -
+87_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ca
+ result_expr: - expected_results -
+88_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ca result_expr: - expected_results -
+89_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ca result_expr: - expected_results -
+90_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ca result_expr: - expected_results -
+91_n: OK regex: ab\Z parsed_regex: ab\Z str: ab
+b
+ result_expr: - expected_results -
+92_n: OK regex: ab\z parsed_regex: ab\z str: ab
+b
+ result_expr: - expected_results -
+93_n: OK regex: ab$ parsed_regex: ab$ str: ab
+b
+ result_expr: - expected_results -
+94_y: OK regex: ab\Z parsed_regex: ab\Z str: b
+ab
+ result_expr: $-[0] expected_results 2
+95_n: OK regex: ab\z parsed_regex: ab\z str: b
+ab
+ result_expr: - expected_results -
+96_y: OK regex: ab$ parsed_regex: ab$ str: b
+ab
+ result_expr: $-[0] expected_results 2
+97_y: OK regex: ab\Z parsed_regex: ab\Z str: b
+ab result_expr: $-[0] expected_results 2
+98_y: OK regex: ab\z parsed_regex: ab\z str: b
+ab result_expr: $-[0] expected_results 2
+99_y: OK regex: ab$ parsed_regex: ab$ str: b
+ab result_expr: $-[0] expected_results 2
+100_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ab
+b
+ result_expr: - expected_results -
+101_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ab
+b
+ result_expr: - expected_results -
+102_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ab
+b
+ result_expr: $-[0] expected_results 0
+103_y: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ab
+ result_expr: $-[0] expected_results 2
+104_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ab
+ result_expr: - expected_results -
+105_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ab
+ result_expr: $-[0] expected_results 2
+106_y: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ab result_expr: $-[0] expected_results 2
+107_y: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ab result_expr: $-[0] expected_results 2
+108_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ab result_expr: $-[0] expected_results 2
+109_n: OK regex: ab\Z parsed_regex: ab\Z str: ac
+b
+ result_expr: - expected_results -
+110_n: OK regex: ab\z parsed_regex: ab\z str: ac
+b
+ result_expr: - expected_results -
+111_n: OK regex: ab$ parsed_regex: ab$ str: ac
+b
+ result_expr: - expected_results -
+112_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ac
+ result_expr: - expected_results -
+113_n: OK regex: ab\z parsed_regex: ab\z str: b
+ac
+ result_expr: - expected_results -
+114_n: OK regex: ab$ parsed_regex: ab$ str: b
+ac
+ result_expr: - expected_results -
+115_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ac result_expr: - expected_results -
+116_n: OK regex: ab\z parsed_regex: ab\z str: b
+ac result_expr: - expected_results -
+117_n: OK regex: ab$ parsed_regex: ab$ str: b
+ac result_expr: - expected_results -
+118_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ac
+b
+ result_expr: - expected_results -
+119_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ac
+b
+ result_expr: - expected_results -
+120_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ac
+b
+ result_expr: - expected_results -
+121_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ac
+ result_expr: - expected_results -
+122_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ac
+ result_expr: - expected_results -
+123_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ac
+ result_expr: - expected_results -
+124_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ac result_expr: - expected_results -
+125_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ac result_expr: - expected_results -
+126_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ac result_expr: - expected_results -
+127_n: OK regex: ab\Z parsed_regex: ab\Z str: ca
+b
+ result_expr: - expected_results -
+128_n: OK regex: ab\z parsed_regex: ab\z str: ca
+b
+ result_expr: - expected_results -
+129_n: OK regex: ab$ parsed_regex: ab$ str: ca
+b
+ result_expr: - expected_results -
+130_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ca
+ result_expr: - expected_results -
+131_n: OK regex: ab\z parsed_regex: ab\z str: b
+ca
+ result_expr: - expected_results -
+132_n: OK regex: ab$ parsed_regex: ab$ str: b
+ca
+ result_expr: - expected_results -
+133_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ca result_expr: - expected_results -
+134_n: OK regex: ab\z parsed_regex: ab\z str: b
+ca result_expr: - expected_results -
+135_n: OK regex: ab$ parsed_regex: ab$ str: b
+ca result_expr: - expected_results -
+136_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ca
+b
+ result_expr: - expected_results -
+137_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ca
+b
+ result_expr: - expected_results -
+138_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ca
+b
+ result_expr: - expected_results -
+139_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ca
+ result_expr: - expected_results -
+140_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ca
+ result_expr: - expected_results -
+141_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ca
+ result_expr: - expected_results -
+142_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ca result_expr: - expected_results -
+143_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ca result_expr: - expected_results -
+144_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ca result_expr: - expected_results -
+145_n: OK regex: abb\Z parsed_regex: abb\Z str: abb
+b
+ result_expr: - expected_results -
+146_n: OK regex: abb\z parsed_regex: abb\z str: abb
+b
+ result_expr: - expected_results -
+147_n: OK regex: abb$ parsed_regex: abb$ str: abb
+b
+ result_expr: - expected_results -
+148_y: OK regex: abb\Z parsed_regex: abb\Z str: b
+abb
+ result_expr: $-[0] expected_results 2
+149_n: OK regex: abb\z parsed_regex: abb\z str: b
+abb
+ result_expr: - expected_results -
+150_y: OK regex: abb$ parsed_regex: abb$ str: b
+abb
+ result_expr: $-[0] expected_results 2
+151_y: OK regex: abb\Z parsed_regex: abb\Z str: b
+abb result_expr: $-[0] expected_results 2
+152_y: OK regex: abb\z parsed_regex: abb\z str: b
+abb result_expr: $-[0] expected_results 2
+153_y: OK regex: abb$ parsed_regex: abb$ str: b
+abb result_expr: $-[0] expected_results 2
+154_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: abb
+b
+ result_expr: - expected_results -
+155_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: abb
+b
+ result_expr: - expected_results -
+156_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: abb
+b
+ result_expr: $-[0] expected_results 0
+157_y: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+abb
+ result_expr: $-[0] expected_results 2
+158_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+abb
+ result_expr: - expected_results -
+159_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+abb
+ result_expr: $-[0] expected_results 2
+160_y: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+abb result_expr: $-[0] expected_results 2
+161_y: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+abb result_expr: $-[0] expected_results 2
+162_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+abb result_expr: $-[0] expected_results 2
+163_n: OK regex: abb\Z parsed_regex: abb\Z str: ac
+b
+ result_expr: - expected_results -
+164_n: OK regex: abb\z parsed_regex: abb\z str: ac
+b
+ result_expr: - expected_results -
+165_n: OK regex: abb$ parsed_regex: abb$ str: ac
+b
+ result_expr: - expected_results -
+166_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ac
+ result_expr: - expected_results -
+167_n: OK regex: abb\z parsed_regex: abb\z str: b
+ac
+ result_expr: - expected_results -
+168_n: OK regex: abb$ parsed_regex: abb$ str: b
+ac
+ result_expr: - expected_results -
+169_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ac result_expr: - expected_results -
+170_n: OK regex: abb\z parsed_regex: abb\z str: b
+ac result_expr: - expected_results -
+171_n: OK regex: abb$ parsed_regex: abb$ str: b
+ac result_expr: - expected_results -
+172_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: ac
+b
+ result_expr: - expected_results -
+173_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: ac
+b
+ result_expr: - expected_results -
+174_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: ac
+b
+ result_expr: - expected_results -
+175_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ac
+ result_expr: - expected_results -
+176_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ac
+ result_expr: - expected_results -
+177_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ac
+ result_expr: - expected_results -
+178_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ac result_expr: - expected_results -
+179_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ac result_expr: - expected_results -
+180_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ac result_expr: - expected_results -
+181_n: OK regex: abb\Z parsed_regex: abb\Z str: ca
+b
+ result_expr: - expected_results -
+182_n: OK regex: abb\z parsed_regex: abb\z str: ca
+b
+ result_expr: - expected_results -
+183_n: OK regex: abb$ parsed_regex: abb$ str: ca
+b
+ result_expr: - expected_results -
+184_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ca
+ result_expr: - expected_results -
+185_n: OK regex: abb\z parsed_regex: abb\z str: b
+ca
+ result_expr: - expected_results -
+186_n: OK regex: abb$ parsed_regex: abb$ str: b
+ca
+ result_expr: - expected_results -
+187_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ca result_expr: - expected_results -
+188_n: OK regex: abb\z parsed_regex: abb\z str: b
+ca result_expr: - expected_results -
+189_n: OK regex: abb$ parsed_regex: abb$ str: b
+ca result_expr: - expected_results -
+190_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: ca
+b
+ result_expr: - expected_results -
+191_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: ca
+b
+ result_expr: - expected_results -
+192_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: ca
+b
+ result_expr: - expected_results -
+193_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ca
+ result_expr: - expected_results -
+194_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ca
+ result_expr: - expected_results -
+195_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ca
+ result_expr: - expected_results -
+196_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ca result_expr: - expected_results -
+197_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ca result_expr: - expected_results -
+198_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ca result_expr: - expected_results -
+199_y: OK regex: '\Aa$'m parsed_regex: '\Aa$'m str: a
+
+ result_expr: $& expected_results a
+
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_14_multiline_modifier.cpp.output b/regression-tests/test-results/clang-15-c++20/pure2-regex_14_multiline_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_15_group_modifiers.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-regex_15_group_modifiers.cpp.execution
new file mode 100644
index 000000000..de92abc48
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20/pure2-regex_15_group_modifiers.cpp.execution
@@ -0,0 +1,87 @@
+Running tests_15_group_modifiers:
+01_y: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: ab result_expr: $& expected_results ab
+02_y: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: ab result_expr: $&:$1 expected_results ab:a
+03_y: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: Ab result_expr: $& expected_results Ab
+04_y: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: Ab result_expr: $&:$1 expected_results Ab:A
+05_n: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: aB result_expr: - expected_results -
+06_n: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: aB result_expr: - expected_results -
+07_y: OK regex: (?i:a)b parsed_regex: (?i:a)b str: ab result_expr: $& expected_results ab
+08_y: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: ab result_expr: $&:$1 expected_results ab:a
+09_y: OK regex: (?i:a)b parsed_regex: (?i:a)b str: Ab result_expr: $& expected_results Ab
+10_y: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: Ab result_expr: $&:$1 expected_results Ab:A
+11_n: OK regex: (?i:a)b parsed_regex: (?i:a)b str: aB result_expr: - expected_results -
+12_n: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: aB result_expr: - expected_results -
+13_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: ab result_expr: $& expected_results ab
+14_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: ab result_expr: $&:$1 expected_results ab:a
+15_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: aB result_expr: $& expected_results aB
+16_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: aB result_expr: $&:$1 expected_results aB:a
+17_n: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: Ab result_expr: - expected_results -
+18_n: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: Ab result_expr: - expected_results -
+19_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: aB result_expr: $& expected_results aB
+20_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: aB result_expr: $1 expected_results a
+21_n: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: AB result_expr: - expected_results -
+22_n: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: AB result_expr: - expected_results -
+23_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: ab result_expr: $& expected_results ab
+24_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: ab result_expr: $&:$1 expected_results ab:a
+25_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: aB result_expr: $& expected_results aB
+26_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: aB result_expr: $&:$1 expected_results aB:a
+27_n: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: Ab result_expr: - expected_results -
+28_n: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: Ab result_expr: - expected_results -
+29_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: aB result_expr: $& expected_results aB
+30_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: aB result_expr: $1 expected_results a
+31_n: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: AB result_expr: - expected_results -
+32_n: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: AB result_expr: - expected_results -
+33_n: OK regex: '((?-i:a.))b'i parsed_regex: '((?-i:a.))b'i str: a
+B result_expr: - expected_results -
+34_n: OK regex: '((?-i:a\N))b'i parsed_regex: '((?-i:a\N))b'i str: a
+B result_expr: - expected_results -
+35_y: OK regex: '((?s-i:a.))b'i parsed_regex: '((?s-i:a.))b'i str: a
+B result_expr: $1 expected_results a
+
+36_n: OK regex: '((?s-i:a\N))b'i parsed_regex: '((?s-i:a\N))b'i str: a
+B result_expr: - expected_results -
+37_n: OK regex: '((?s-i:a.))b'i parsed_regex: '((?s-i:a.))b'i str: B
+B result_expr: - expected_results -
+38_n: OK regex: '((?s-i:a\N))b'i parsed_regex: '((?s-i:a\N))b'i str: B
+B result_expr: - expected_results -
+39_y: OK regex: (?i:.[b].) parsed_regex: (?i:.[b].) str: abd result_expr: $& expected_results abd
+40_y: OK regex: (?i:\N[b]\N) parsed_regex: (?i:\N[b]\N) str: abd result_expr: $& expected_results abd
+41_n: OK regex: ^(?:a?b?)*$ parsed_regex: ^(?:a?b?)*$ str: a-- result_expr: - expected_results -
+42_y: OK regex: ((?s)^a(.))((?m)^b$) parsed_regex: ((?s)^a(.))((?m)^b$) str: a
+b
+c
+ result_expr: $1;$2;$3 expected_results a
+;
+;b
+43_y: OK regex: ((?m)^b$) parsed_regex: ((?m)^b$) str: a
+b
+c
+ result_expr: $1 expected_results b
+44_y: OK regex: (?m)^b parsed_regex: (?m)^b str: a
+b
+ result_expr: $& expected_results b
+45_y: OK regex: (?m)^(b) parsed_regex: (?m)^(b) str: a
+b
+ result_expr: $1 expected_results b
+46_y: OK regex: ((?m)^b) parsed_regex: ((?m)^b) str: a
+b
+ result_expr: $1 expected_results b
+47_y: OK regex: \n((?m)^b) parsed_regex: \n((?m)^b) str: a
+b
+ result_expr: $1 expected_results b
+48_n: OK regex: ^b parsed_regex: ^b str: a
+b
+c
+ result_expr: - expected_results -
+49_n: OK regex: ()^b parsed_regex: ()^b str: a
+b
+c
+ result_expr: - expected_results -
+50_y: OK regex: ((?m)^b) parsed_regex: ((?m)^b) str: a
+b
+c
+ result_expr: $1 expected_results b
+51_y: OK Warning: Parsed regex does not match. regex: '(foo)'n parsed_regex: '(?:foo)'n str: foobar result_expr: $&-$1 expected_results foo-
+52_y: OK Warning: Parsed regex does not match. regex: '(?-n)(foo)(?n)(bar)'n parsed_regex: '(?-n)(foo)(?n)(?:bar)'n str: foobar result_expr: $&-$1-$2 expected_results foobar-foo-
+53_y: OK Warning: Parsed regex does not match. regex: '(?-n:(foo)(?n:(bar)))'n parsed_regex: '(?-n:(foo)(?n:(?:bar)))'n str: foobar result_expr: $&-$1-$2 expected_results foobar-foo-
+
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_15_group_modifiers.cpp.output b/regression-tests/test-results/clang-15-c++20/pure2-regex_15_group_modifiers.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_16_perl_syntax_modifier.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-regex_16_perl_syntax_modifier.cpp.execution
new file mode 100644
index 000000000..761720007
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20/pure2-regex_16_perl_syntax_modifier.cpp.execution
@@ -0,0 +1,35 @@
+Running tests_16_perl_syntax_modifier:
+01_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $& expected_results a
+02_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $-[0] expected_results 0
+03_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $+[0] expected_results 1
+04_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $& expected_results abbb
+05_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $-[0] expected_results 0
+06_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $+[0] expected_results 4
+07_y: OK Warning: Parsed regex does not match. regex: /a\N c/x parsed_regex: /a\Nc/x str: abc result_expr: $& expected_results abc
+08_y: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzc result_expr: $& expected_results axyzc
+09_n: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzd result_expr: - expected_results -
+10_yS: OK regex: /[a b]/x parsed_regex: /[a b]/x str:   result_expr: $& expected_results  
+11_n: OK regex: /[a b]/xx parsed_regex: /[a b]/xx str:   result_expr: - expected_results -
+12_y: OK regex: /[a\ b]/xx parsed_regex: /[a\ b]/xx str:   result_expr: $& expected_results  
+13_n: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: a result_expr: - expected_results -
+14_n: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: b result_expr: - expected_results -
+15_y: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: A result_expr: $& expected_results A
+16_yS: OK regex: /(?x:[a b])/xx parsed_regex: /(?x:[a b])/xx str:   result_expr: $& expected_results  
+17_n: OK regex: /(?xx:[a b])/x parsed_regex: /(?xx:[a b])/x str:   result_expr: - expected_results -
+18_yS: OK regex: /(?x)[a b]/xx parsed_regex: /(?x)[a b]/xx str:   result_expr: $& expected_results  
+19_n: OK regex: /(?xx)[a b]/x parsed_regex: /(?xx)[a b]/x str:   result_expr: - expected_results -
+20_yS: OK regex: /(?-x:[a b])/xx parsed_regex: /(?-x:[a b])/xx str:   result_expr: $& expected_results  
+21_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $& expected_results a
+22_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $-[0] expected_results 0
+23_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $+[0] expected_results 1
+24_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $& expected_results abbb
+25_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $-[0] expected_results 0
+26_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $+[0] expected_results 4
+27_y: OK Warning: Parsed regex does not match. regex: /a\N c/x parsed_regex: /a\Nc/x str: abc result_expr: $& expected_results abc
+28_y: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzc result_expr: $& expected_results axyzc
+29_n: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzd result_expr: - expected_results -
+30_y: OK regex: /[#]/ parsed_regex: /[#]/ str: a#b result_expr: $& expected_results #
+31_y: OK regex: /[#]b/ parsed_regex: /[#]b/ str: a#b result_expr: $& expected_results #b
+32_y: OK regex: /[#]/x parsed_regex: /[#]/x str: a#b result_expr: $& expected_results #
+33_y: OK regex: /[#]b/x parsed_regex: /[#]b/x str: a#b result_expr: $& expected_results #b
+
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_16_perl_syntax_modifier.cpp.output b/regression-tests/test-results/clang-15-c++20/pure2-regex_16_perl_syntax_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_17_comments.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-regex_17_comments.cpp.execution
new file mode 100644
index 000000000..17c9a5d55
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20/pure2-regex_17_comments.cpp.execution
@@ -0,0 +1,5 @@
+Running tests_17_comments:
+01_y: OK regex: ^a(?#xxx){3}c parsed_regex: ^a(?#xxx){3}c str: aaac result_expr: $& expected_results aaac
+02_y: OK Warning: Parsed regex does not match. regex: '^a (?#xxx) (?#yyy) {3}c'x parsed_regex: '^a(?#xxx)(?#yyy){3}c'x str: aaac result_expr: $& expected_results aaac
+03_y: OK Warning: Parsed regex does not match. regex: 'foo # Match foo'x parsed_regex: 'foo'x str: foobar result_expr: $& expected_results foo
+
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_17_comments.cpp.output b/regression-tests/test-results/clang-15-c++20/pure2-regex_17_comments.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_18_branch_reset.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-regex_18_branch_reset.cpp.execution
new file mode 100644
index 000000000..1d088ce31
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20/pure2-regex_18_branch_reset.cpp.execution
@@ -0,0 +1,17 @@
+Running tests_18_branch_reset:
+01_y: OK regex: (?|(a)) parsed_regex: (?|(a)) str: a result_expr: $1-$+ expected_results a-a
+02_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: d!o!da result_expr: $1-$2-$3 expected_results !o!-o-a
+03_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: aabc result_expr: $1-$2-$3 expected_results a--c
+04_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: ixyjp result_expr: $1-$2-$3 expected_results x-y-p
+05_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: a result_expr: $1 expected_results a
+06_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: b result_expr: $1 expected_results b
+07_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: c result_expr: $1 expected_results c
+08_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: d result_expr: $1 expected_results d
+09_y: OK regex: (.)(?|(.)(.)x|(.)d)(.) parsed_regex: (.)(?|(.)(.)x|(.)d)(.) str: abcde result_expr: $1-$2-$3-$4-$5- expected_results b-c--e--
+10_y: OK regex: (\N)(?|(\N)(\N)x|(\N)d)(\N) parsed_regex: (\N)(?|(\N)(\N)x|(\N)d)(\N) str: abcde result_expr: $1-$2-$3-$4-$5- expected_results b-c--e--
+11_yM: OK regex: (?|(?<foo>x)) parsed_regex: (?|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+12_yM: OK regex: (?|(?<foo>x)|(?<bar>y)) parsed_regex: (?|(?<foo>x)|(?<bar>y)) str: x result_expr: $+{foo} expected_results x
+13_yM: OK regex: (?|(?<bar>y)|(?<foo>x)) parsed_regex: (?|(?<bar>y)|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+14_yM: OK regex: (?<bar>)(?|(?<foo>x)) parsed_regex: (?<bar>)(?|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+15_y: OK regex: (?|(b)|()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(a)) parsed_regex: (?|(b)|()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(a)) str: a result_expr: $& expected_results a
+
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_18_branch_reset.cpp.output b/regression-tests/test-results/clang-15-c++20/pure2-regex_18_branch_reset.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_19_lookahead.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-regex_19_lookahead.cpp.execution
new file mode 100644
index 000000000..7b34914b1
--- /dev/null
+++ b/regression-tests/test-results/clang-15-c++20/pure2-regex_19_lookahead.cpp.execution
@@ -0,0 +1,77 @@
+Running tests_19_lookahead:
+01_y: OK regex: a(?!b). parsed_regex: a(?!b). str: abad result_expr: $& expected_results ad
+02_y: OK regex: (?=)a parsed_regex: (?=)a str: a result_expr: $& expected_results a
+03_y: OK regex: a(?=d). parsed_regex: a(?=d). str: abad result_expr: $& expected_results ad
+04_y: OK regex: a(?=c|d). parsed_regex: a(?=c|d). str: abad result_expr: $& expected_results ad
+05_y: OK regex: ^(?:b|a(?=(.)))*\1 parsed_regex: ^(?:b|a(?=(.)))*\1 str: abc result_expr: $& expected_results ab
+06_y: OK regex: (?=(a+?))(\1ab) parsed_regex: (?=(a+?))(\1ab) str: aaab result_expr: $2 expected_results aab
+07_n: OK regex: ^(?=(a+?))\1ab parsed_regex: ^(?=(a+?))\1ab str: aaab result_expr: - expected_results -
+08_y: OK regex: (?=(a+?))(\1ab) parsed_regex: (?=(a+?))(\1ab) str: aaab result_expr: $2 expected_results aab
+09_n: OK regex: ^(?=(a+?))\1ab parsed_regex: ^(?=(a+?))\1ab str: aaab result_expr: - expected_results -
+10_y: OK regex: (.*)(?=c) parsed_regex: (.*)(?=c) str: abcd result_expr: $1 expected_results ab
+11_yB: OK regex: (.*)(?=c)c parsed_regex: (.*)(?=c)c str: abcd result_expr: $1 expected_results ab
+12_y: OK regex: (.*)(?=b|c) parsed_regex: (.*)(?=b|c) str: abcd result_expr: $1 expected_results ab
+13_y: OK regex: (.*)(?=b|c)c parsed_regex: (.*)(?=b|c)c str: abcd result_expr: $1 expected_results ab
+14_y: OK regex: (.*)(?=c|b) parsed_regex: (.*)(?=c|b) str: abcd result_expr: $1 expected_results ab
+15_y: OK regex: (.*)(?=c|b)c parsed_regex: (.*)(?=c|b)c str: abcd result_expr: $1 expected_results ab
+16_y: OK regex: (.*)(?=[bc]) parsed_regex: (.*)(?=[bc]) str: abcd result_expr: $1 expected_results ab
+17_yB: OK regex: (.*)(?=[bc])c parsed_regex: (.*)(?=[bc])c str: abcd result_expr: $1 expected_results ab
+18_y: OK regex: (.*?)(?=c) parsed_regex: (.*?)(?=c) str: abcd result_expr: $1 expected_results ab
+19_yB: OK regex: (.*?)(?=c)c parsed_regex: (.*?)(?=c)c str: abcd result_expr: $1 expected_results ab
+20_y: OK regex: (.*?)(?=b|c) parsed_regex: (.*?)(?=b|c) str: abcd result_expr: $1 expected_results a
+21_y: OK regex: (.*?)(?=b|c)c parsed_regex: (.*?)(?=b|c)c str: abcd result_expr: $1 expected_results ab
+22_y: OK regex: (.*?)(?=c|b) parsed_regex: (.*?)(?=c|b) str: abcd result_expr: $1 expected_results a
+23_y: OK regex: (.*?)(?=c|b)c parsed_regex: (.*?)(?=c|b)c str: abcd result_expr: $1 expected_results ab
+24_y: OK regex: (.*?)(?=[bc]) parsed_regex: (.*?)(?=[bc]) str: abcd result_expr: $1 expected_results a
+25_yB: OK regex: (.*?)(?=[bc])c parsed_regex: (.*?)(?=[bc])c str: abcd result_expr: $1 expected_results ab
+26_y: OK regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) parsed_regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) str: aaaaaaaa result_expr: $1 expected_results aaaaaaa
+27_y: OK regex: a(?!b(?!c))(..) parsed_regex: a(?!b(?!c))(..) str: abababc result_expr: $1 expected_results bc
+28_y: OK regex: a(?!b(?=a))(..) parsed_regex: a(?!b(?=a))(..) str: abababc result_expr: $1 expected_results bc
+37_y: OK regex: X(\w+)(?=\s)|X(\w+) parsed_regex: X(\w+)(?=\s)|X(\w+) str: Xab result_expr: [$1-$2] expected_results [-ab]
+38_y: OK regex: ^a*(?=b)b parsed_regex: ^a*(?=b)b str: ab result_expr: $& expected_results ab
+39_y: OK regex: '(?!\A)x'm parsed_regex: '(?!\A)x'm str: a
+xb
+ result_expr: - expected_results -
+40_n: OK regex: '^(o)(?!.*\1)'i parsed_regex: '^(o)(?!.*\1)'i str: Oo result_expr: - expected_results -
+41_n: OK regex: .*a(?!(b|cd)*e).*f parsed_regex: .*a(?!(b|cd)*e).*f str: ......abef result_expr: - expected_results -
+42_y: OK regex: ^(a*?)(?!(aa|aaaa)*$) parsed_regex: ^(a*?)(?!(aa|aaaa)*$) str: aaaaaaaaaaaaaaaaaaaa result_expr: $1 expected_results a
+43_y: OK regex: (?!)+?|(.{2,4}) parsed_regex: (?!)+?|(.{2,4}) str: abcde result_expr: $1 expected_results abcd
+44_y: OK regex: ^(a*?)(?!(a{6}|a{5})*$) parsed_regex: ^(a*?)(?!(a{6}|a{5})*$) str: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa result_expr: $+[1] expected_results 12
+45_y: OK regex: a(?!b(?!c(?!d(?!e))))...(.) parsed_regex: a(?!b(?!c(?!d(?!e))))...(.) str: abxabcdxabcde result_expr: $1 expected_results e
+46_y: OK regex: X(?!b+(?!(c+)*(?!(c+)*d))).*X parsed_regex: X(?!b+(?!(c+)*(?!(c+)*d))).*X str: aXbbbbbbbcccccccccccccaaaX result_expr: - expected_results -
+47_y: OK regex: ((?s).)c(?!.) parsed_regex: ((?s).)c(?!.) str: a
+b
+c
+ result_expr: $1 expected_results 
+
+48_y: OK regex: ((?s).)c(?!.) parsed_regex: ((?s).)c(?!.) str: a
+b
+c
+ result_expr: $1:$& expected_results 
+:
+c
+49_y: OK regex: ((?s)b.)c(?!.) parsed_regex: ((?s)b.)c(?!.) str: a
+b
+c
+ result_expr: $1 expected_results b
+
+50_y: OK regex: ((?s)b.)c(?!.) parsed_regex: ((?s)b.)c(?!.) str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+51_y: OK regex: ((?s)b.)c(?!\N) parsed_regex: ((?s)b.)c(?!\N) str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+52_y: OK regex: '(b.)c(?!\N)'s parsed_regex: '(b.)c(?!\N)'s str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+53_n: OK regex: a*(?!) parsed_regex: a*(?!) str: aaaab result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-regex_19_lookahead.cpp.output b/regression-tests/test-results/clang-15-c++20/pure2-regex_19_lookahead.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_01_char_matcher.cpp.execution b/regression-tests/test-results/clang-18-c++20/pure2-regex_01_char_matcher.cpp.execution
new file mode 100644
index 000000000..af124736e
--- /dev/null
+++ b/regression-tests/test-results/clang-18-c++20/pure2-regex_01_char_matcher.cpp.execution
@@ -0,0 +1,14 @@
+Running tests_01_char_matcher:
+01_y: OK regex: abc parsed_regex: abc str: abc result_expr: $& expected_results abc
+02_y: OK regex: abc parsed_regex: abc str: abc result_expr: $-[0] expected_results 0
+03_y: OK regex: abc parsed_regex: abc str: abc result_expr: $+[0] expected_results 3
+04_n: OK regex: abc parsed_regex: abc str: xbc result_expr: - expected_results -
+05_n: OK regex: abc parsed_regex: abc str: axc result_expr: - expected_results -
+06_n: OK regex: abc parsed_regex: abc str: abx result_expr: - expected_results -
+07_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $& expected_results abc
+08_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $-[0] expected_results 1
+09_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $+[0] expected_results 4
+10_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $& expected_results abc
+11_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $-[0] expected_results 2
+12_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $+[0] expected_results 5
+
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_01_char_matcher.cpp.output b/regression-tests/test-results/clang-18-c++20/pure2-regex_01_char_matcher.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_02_ranges.cpp.execution b/regression-tests/test-results/clang-18-c++20/pure2-regex_02_ranges.cpp.execution
new file mode 100644
index 000000000..dc0b36002
--- /dev/null
+++ b/regression-tests/test-results/clang-18-c++20/pure2-regex_02_ranges.cpp.execution
@@ -0,0 +1,42 @@
+Running tests_02_ranges:
+01_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $& expected_results abc
+02_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $-[0] expected_results 0
+03_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $+[0] expected_results 3
+04_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $& expected_results abc
+05_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $-[0] expected_results 0
+06_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $+[0] expected_results 3
+07_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $& expected_results abbc
+08_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $-[0] expected_results 0
+09_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $+[0] expected_results 4
+10_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $& expected_results abbbbc
+11_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $-[0] expected_results 0
+12_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $+[0] expected_results 6
+13_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $& expected_results abbbbc
+14_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $-[0] expected_results 0
+15_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $+[0] expected_results 6
+16_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $& expected_results abbc
+17_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $-[0] expected_results 0
+18_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $+[0] expected_results 4
+19_n: OK regex: ab+bc parsed_regex: ab+bc str: abc result_expr: - expected_results -
+20_n: OK regex: ab+bc parsed_regex: ab+bc str: abq result_expr: - expected_results -
+21_n: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abq result_expr: - expected_results -
+22_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $& expected_results abbbbc
+23_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $-[0] expected_results 0
+24_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $+[0] expected_results 6
+25_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $& expected_results abbbbc
+26_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $-[0] expected_results 0
+27_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $+[0] expected_results 6
+28_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $& expected_results abbbbc
+29_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $-[0] expected_results 0
+30_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $+[0] expected_results 6
+31_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $& expected_results abbbbc
+32_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $-[0] expected_results 0
+33_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $+[0] expected_results 6
+34_n: OK regex: ab{4,5}bc parsed_regex: ab{4,5}bc str: abbbbc result_expr: - expected_results -
+35_y: OK regex: ab?bc parsed_regex: ab?bc str: abbc result_expr: $& expected_results abbc
+36_y: OK regex: ab?bc parsed_regex: ab?bc str: abc result_expr: $& expected_results abc
+37_y: OK regex: ab{0,1}bc parsed_regex: ab{0,1}bc str: abc result_expr: $& expected_results abc
+38_n: OK regex: ab?bc parsed_regex: ab?bc str: abbbbc result_expr: - expected_results -
+39_y: OK regex: ab?c parsed_regex: ab?c str: abc result_expr: $& expected_results abc
+40_y: OK regex: ab{0,1}c parsed_regex: ab{0,1}c str: abc result_expr: $& expected_results abc
+
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_02_ranges.cpp.output b/regression-tests/test-results/clang-18-c++20/pure2-regex_02_ranges.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_03_wildcard.cpp.execution b/regression-tests/test-results/clang-18-c++20/pure2-regex_03_wildcard.cpp.execution
new file mode 100644
index 000000000..f3f0ea9cc
--- /dev/null
+++ b/regression-tests/test-results/clang-18-c++20/pure2-regex_03_wildcard.cpp.execution
@@ -0,0 +1,22 @@
+Running tests_03_wildcard:
+01_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $& expected_results a
+02_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $-[0] expected_results 0
+03_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $+[0] expected_results 1
+04_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $& expected_results abbb
+05_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $-[0] expected_results 0
+06_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+07_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $& expected_results a
+08_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $-[0] expected_results 0
+09_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $+[0] expected_results 1
+10_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $& expected_results abbb
+11_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $-[0] expected_results 0
+12_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+13_y: OK Warning: Parsed regex does not match. regex: \N{ 3 , 4 } parsed_regex: \N{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+14_y: OK regex: a.c parsed_regex: a.c str: abc result_expr: $& expected_results abc
+15_y: OK regex: a.c parsed_regex: a.c str: axc result_expr: $& expected_results axc
+16_y: OK regex: a\Nc parsed_regex: a\Nc str: abc result_expr: $& expected_results abc
+17_y: OK regex: a.*c parsed_regex: a.*c str: axyzc result_expr: $& expected_results axyzc
+18_y: OK regex: a\N*c parsed_regex: a\N*c str: axyzc result_expr: $& expected_results axyzc
+19_n: OK regex: a.*c parsed_regex: a.*c str: axyzd result_expr: - expected_results -
+20_n: OK regex: a\N*c parsed_regex: a\N*c str: axyzd result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_03_wildcard.cpp.output b/regression-tests/test-results/clang-18-c++20/pure2-regex_03_wildcard.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_04_start_end.cpp.execution b/regression-tests/test-results/clang-18-c++20/pure2-regex_04_start_end.cpp.execution
new file mode 100644
index 000000000..6fef36434
--- /dev/null
+++ b/regression-tests/test-results/clang-18-c++20/pure2-regex_04_start_end.cpp.execution
@@ -0,0 +1,11 @@
+Running tests_04_start_end:
+01_y: OK regex: ^abc$ parsed_regex: ^abc$ str: abc result_expr: $& expected_results abc
+02_n: OK regex: ^abc$ parsed_regex: ^abc$ str: abcc result_expr: - expected_results -
+03_y: OK regex: ^abc parsed_regex: ^abc str: abcc result_expr: $& expected_results abc
+04_n: OK regex: ^abc$ parsed_regex: ^abc$ str: aabc result_expr: - expected_results -
+05_y: OK regex: abc$ parsed_regex: abc$ str: aabc result_expr: $& expected_results abc
+06_n: OK regex: abc$ parsed_regex: abc$ str: aabcd result_expr: - expected_results -
+07_y: OK regex: ^ parsed_regex: ^ str: abc result_expr: $& expected_results 
+08_y: OK regex: $ parsed_regex: $ str: abc result_expr: $& expected_results 
+09_n: OK regex: $b parsed_regex: $b str: b result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_04_start_end.cpp.output b/regression-tests/test-results/clang-18-c++20/pure2-regex_04_start_end.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_05_classes.cpp.execution b/regression-tests/test-results/clang-18-c++20/pure2-regex_05_classes.cpp.execution
new file mode 100644
index 000000000..306bf3395
--- /dev/null
+++ b/regression-tests/test-results/clang-18-c++20/pure2-regex_05_classes.cpp.execution
@@ -0,0 +1,21 @@
+Running tests_05_classes:
+01_n: OK regex: a[bc]d parsed_regex: a[bc]d str: abc result_expr: - expected_results -
+02_y: OK regex: a[bc]d parsed_regex: a[bc]d str: abd result_expr: $& expected_results abd
+03_y: OK regex: a[b]d parsed_regex: a[b]d str: abd result_expr: $& expected_results abd
+04_y: OK regex: [a][b][d] parsed_regex: [a][b][d] str: abd result_expr: $& expected_results abd
+05_y: OK regex: .[b]. parsed_regex: .[b]. str: abd result_expr: $& expected_results abd
+06_n: OK regex: .[b]. parsed_regex: .[b]. str: aBd result_expr: - expected_results -
+07_n: OK regex: a[b-d]e parsed_regex: a[b-d]e str: abd result_expr: - expected_results -
+08_y: OK regex: a[b-d]e parsed_regex: a[b-d]e str: ace result_expr: $& expected_results ace
+09_y: OK regex: a[b-d] parsed_regex: a[b-d] str: aac result_expr: $& expected_results ac
+10_y: OK regex: a[-b] parsed_regex: a[-b] str: a- result_expr: $& expected_results a-
+11_y: OK regex: a[b-] parsed_regex: a[b-] str: a- result_expr: $& expected_results a-
+12_y: OK regex: a] parsed_regex: a] str: a] result_expr: $& expected_results a]
+13_y: OK regex: a[]]b parsed_regex: a[]]b str: a]b result_expr: $& expected_results a]b
+14_y: OK regex: a[^bc]d parsed_regex: a[^bc]d str: aed result_expr: $& expected_results aed
+15_n: OK regex: a[^bc]d parsed_regex: a[^bc]d str: abd result_expr: - expected_results -
+16_y: OK regex: a[^-b]c parsed_regex: a[^-b]c str: adc result_expr: $& expected_results adc
+17_n: OK regex: a[^-b]c parsed_regex: a[^-b]c str: a-c result_expr: - expected_results -
+18_n: OK regex: a[^]b]c parsed_regex: a[^]b]c str: a]c result_expr: - expected_results -
+19_y: OK regex: a[^]b]c parsed_regex: a[^]b]c str: adc result_expr: $& expected_results adc
+
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_05_classes.cpp.output b/regression-tests/test-results/clang-18-c++20/pure2-regex_05_classes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_06_boundaries.cpp.execution b/regression-tests/test-results/clang-18-c++20/pure2-regex_06_boundaries.cpp.execution
new file mode 100644
index 000000000..420a4c587
--- /dev/null
+++ b/regression-tests/test-results/clang-18-c++20/pure2-regex_06_boundaries.cpp.execution
@@ -0,0 +1,19 @@
+Running tests_06_boundaries:
+01_y: OK regex: \ba\b parsed_regex: \ba\b str: a- result_expr: - expected_results -
+02_y: OK regex: \ba\b parsed_regex: \ba\b str: -a result_expr: - expected_results -
+03_y: OK regex: \ba\b parsed_regex: \ba\b str: -a- result_expr: - expected_results -
+04_n: OK regex: \by\b parsed_regex: \by\b str: xy result_expr: - expected_results -
+05_n: OK regex: \by\b parsed_regex: \by\b str: yz result_expr: - expected_results -
+06_n: OK regex: \by\b parsed_regex: \by\b str: xyz result_expr: - expected_results -
+07_n: OK regex: \Ba\B parsed_regex: \Ba\B str: a- result_expr: - expected_results -
+08_n: OK regex: \Ba\B parsed_regex: \Ba\B str: -a result_expr: - expected_results -
+09_n: OK regex: \Ba\B parsed_regex: \Ba\B str: -a- result_expr: - expected_results -
+10_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: - expected_results -
+11_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: $-[0] expected_results 1
+12_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: $+[0] expected_results 2
+13_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: - expected_results -
+14_y: OK regex: \by\B parsed_regex: \by\B str: yz result_expr: - expected_results -
+15_y: OK regex: \By\B parsed_regex: \By\B str: xyz result_expr: - expected_results -
+16_n: OK regex: \b parsed_regex: \b str:  result_expr: - expected_results -
+17_y: OK regex: \B parsed_regex: \B str:  result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_06_boundaries.cpp.output b/regression-tests/test-results/clang-18-c++20/pure2-regex_06_boundaries.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_07_short_classes.cpp.execution b/regression-tests/test-results/clang-18-c++20/pure2-regex_07_short_classes.cpp.execution
new file mode 100644
index 000000000..519c05f92
--- /dev/null
+++ b/regression-tests/test-results/clang-18-c++20/pure2-regex_07_short_classes.cpp.execution
@@ -0,0 +1,26 @@
+Running tests_07_short_classes:
+01_y: OK regex: \w parsed_regex: \w str: a result_expr: - expected_results -
+02_n: OK regex: \w parsed_regex: \w str: - result_expr: - expected_results -
+03_n: OK regex: \W parsed_regex: \W str: a result_expr: - expected_results -
+04_y: OK regex: \W parsed_regex: \W str: - result_expr: - expected_results -
+05_y: OK regex: a\sb parsed_regex: a\sb str: a b result_expr: - expected_results -
+06_n: OK regex: a\sb parsed_regex: a\sb str: a-b result_expr: - expected_results -
+07_n: OK regex: a\Sb parsed_regex: a\Sb str: a b result_expr: - expected_results -
+08_y: OK regex: a\Sb parsed_regex: a\Sb str: a-b result_expr: - expected_results -
+09_y: OK regex: \d parsed_regex: \d str: 1 result_expr: - expected_results -
+10_n: OK regex: \d parsed_regex: \d str: - result_expr: - expected_results -
+11_n: OK regex: \D parsed_regex: \D str: 1 result_expr: - expected_results -
+12_y: OK regex: \D parsed_regex: \D str: - result_expr: - expected_results -
+13_y: OK regex: [\w] parsed_regex: [\w] str: a result_expr: - expected_results -
+14_n: OK regex: [\w] parsed_regex: [\w] str: - result_expr: - expected_results -
+15_n: OK regex: [\W] parsed_regex: [\W] str: a result_expr: - expected_results -
+16_y: OK regex: [\W] parsed_regex: [\W] str: - result_expr: - expected_results -
+17_y: OK regex: a[\s]b parsed_regex: a[\s]b str: a b result_expr: - expected_results -
+18_n: OK regex: a[\s]b parsed_regex: a[\s]b str: a-b result_expr: - expected_results -
+19_n: OK regex: a[\S]b parsed_regex: a[\S]b str: a b result_expr: - expected_results -
+20_y: OK regex: a[\S]b parsed_regex: a[\S]b str: a-b result_expr: - expected_results -
+21_y: OK regex: [\d] parsed_regex: [\d] str: 1 result_expr: - expected_results -
+22_n: OK regex: [\d] parsed_regex: [\d] str: - result_expr: - expected_results -
+23_n: OK regex: [\D] parsed_regex: [\D] str: 1 result_expr: - expected_results -
+24_y: OK regex: [\D] parsed_regex: [\D] str: - result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_07_short_classes.cpp.output b/regression-tests/test-results/clang-18-c++20/pure2-regex_07_short_classes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_08_alternatives.cpp.execution b/regression-tests/test-results/clang-18-c++20/pure2-regex_08_alternatives.cpp.execution
new file mode 100644
index 000000000..c12fd2afe
--- /dev/null
+++ b/regression-tests/test-results/clang-18-c++20/pure2-regex_08_alternatives.cpp.execution
@@ -0,0 +1,4 @@
+Running tests_08_alternatives:
+01_y: OK regex: ab|cd parsed_regex: ab|cd str: abc result_expr: $& expected_results ab
+02_y: OK regex: ab|cd parsed_regex: ab|cd str: abcd result_expr: $& expected_results ab
+
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_08_alternatives.cpp.output b/regression-tests/test-results/clang-18-c++20/pure2-regex_08_alternatives.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_09_groups.cpp.execution b/regression-tests/test-results/clang-18-c++20/pure2-regex_09_groups.cpp.execution
new file mode 100644
index 000000000..05df860f9
--- /dev/null
+++ b/regression-tests/test-results/clang-18-c++20/pure2-regex_09_groups.cpp.execution
@@ -0,0 +1,13 @@
+Running tests_09_groups:
+01_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $&-$1 expected_results ef-
+02_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $-[0] expected_results 1
+03_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $+[0] expected_results 3
+04_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $-[1] expected_results 1
+05_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $+[1] expected_results 1
+06_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $&-$1-$2 expected_results a-a-a
+07_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $-[0]-$-[1]-$-[2] expected_results 0-0-0
+08_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $+[0]-$+[1]-$+[2] expected_results 1-1-1
+09_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $&-$1-$2 expected_results abc-a-c
+10_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $-[0]-$-[1]-$-[2] expected_results 0-0-2
+11_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $+[0]-$+[1]-$+[2] expected_results 3-1-3
+
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_09_groups.cpp.output b/regression-tests/test-results/clang-18-c++20/pure2-regex_09_groups.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_10_escapes.cpp.execution b/regression-tests/test-results/clang-18-c++20/pure2-regex_10_escapes.cpp.execution
new file mode 100644
index 000000000..fe6e6efc9
--- /dev/null
+++ b/regression-tests/test-results/clang-18-c++20/pure2-regex_10_escapes.cpp.execution
@@ -0,0 +1,39 @@
+Running tests_10_escapes:
+01_y: OK regex: a\(b parsed_regex: a\(b str: a(b result_expr: $&-$1 expected_results a(b-
+02_y: OK regex: a\(*b parsed_regex: a\(*b str: ab result_expr: $& expected_results ab
+03_y: OK regex: a\(*b parsed_regex: a\(*b str: a((b result_expr: $& expected_results a((b
+04_y: OK regex: a\\b parsed_regex: a\\b str: a\b result_expr: $& expected_results a\b
+05_y: OK regex: foo(\h+)bar parsed_regex: foo(\h+)bar str: foo	bar result_expr: $1 expected_results 	
+06_y: OK regex: (\H+)(\h) parsed_regex: (\H+)(\h) str: foo	bar result_expr: $1-$2 expected_results foo-	
+07_y: OK regex: (\h+)(\H) parsed_regex: (\h+)(\H) str: foo	bar result_expr: $1-$2 expected_results 	-b
+08_y: OK regex: foo(\h)bar parsed_regex: foo(\h)bar str: foo	bar result_expr: $1 expected_results 	
+09_y: OK regex: (\H)(\h) parsed_regex: (\H)(\h) str: foo	bar result_expr: $1-$2 expected_results o-	
+10_y: OK regex: (\h)(\H) parsed_regex: (\h)(\H) str: foo	bar result_expr: $1-$2 expected_results 	-b
+11_y: OK regex: foo(\v+)bar parsed_regex: foo(\v+)bar str: foo
+
+
+bar result_expr: $1 expected_results 
+
+
+
+12_y: OK regex: (\V+)(\v) parsed_regex: (\V+)(\v) str: foo
+
+
+bar result_expr: $1-$2 expected_results foo-
+13_y: OK regex: (\v+)(\V) parsed_regex: (\v+)(\V) str: foo
+
+
+bar result_expr: $1-$2 expected_results 
+
+
+-b
+14_y: OK regex: foo(\v)bar parsed_regex: foo(\v)bar str: foo
bar result_expr: $1 expected_results 
+15_y: OK regex: (\V)(\v) parsed_regex: (\V)(\v) str: foo
bar result_expr: $1-$2 expected_results o-
+16_y: OK regex: (\v)(\V) parsed_regex: (\v)(\V) str: foo
bar result_expr: $1-$2 expected_results 
-b
+17_y: OK regex: foo\t\n\r\f\a\ebar parsed_regex: foo\t\n\r\f\a\ebar str: foo	
+
bar result_expr: $& expected_results foo	
+
bar
+18_y: OK regex: foo\Kbar parsed_regex: foo\Kbar str: foobar result_expr: $& expected_results bar
+19_y: OK regex: \x41\x42 parsed_regex: \x41\x42 str: AB result_expr: $& expected_results AB
+20_y: OK regex: \101\o{102} parsed_regex: \101\o{102} str: AB result_expr: $& expected_results AB
+
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_10_escapes.cpp.output b/regression-tests/test-results/clang-18-c++20/pure2-regex_10_escapes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_11_group_references.cpp.execution b/regression-tests/test-results/clang-18-c++20/pure2-regex_11_group_references.cpp.execution
new file mode 100644
index 000000000..724d0085a
--- /dev/null
+++ b/regression-tests/test-results/clang-18-c++20/pure2-regex_11_group_references.cpp.execution
@@ -0,0 +1,26 @@
+Running tests_11_group_references:
+01_y: OK regex: (foo)(\g-2) parsed_regex: (foo)(\g-2) str: foofoo result_expr: $1-$2 expected_results foo-foo
+02_y: OK regex: (foo)(\g-2)(foo)(\g-2) parsed_regex: (foo)(\g-2)(foo)(\g-2) str: foofoofoofoo result_expr: $1-$2-$3-$4 expected_results foo-foo-foo-foo
+03_y: OK regex: (([abc]+) \g-1)(([abc]+) \g{-1}) parsed_regex: (([abc]+) \g-1)(([abc]+) \g{-1}) str: abc abccba cba result_expr: $2-$4 expected_results abc-cba
+04_y: OK regex: (a)(b)(c)\g1\g2\g3 parsed_regex: (a)(b)(c)\g1\g2\g3 str: abcabc result_expr: $1$2$3 expected_results abc
+05_y: OK regex: /(?'n'foo) \g{n}/ parsed_regex: /(?'n'foo) \g{n}/ str: ..foo foo.. result_expr: $1 expected_results foo
+06_y: OK regex: /(?'n'foo) \g{ n }/ parsed_regex: /(?'n'foo) \g{ n }/ str: ..foo foo.. result_expr: $1 expected_results foo
+07_yM: OK regex: /(?'n'foo) \g{n}/ parsed_regex: /(?'n'foo) \g{n}/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+08_y: OK regex: /(?<n>foo) \g{n}/ parsed_regex: /(?<n>foo) \g{n}/ str: ..foo foo.. result_expr: $1 expected_results foo
+09_yM: OK regex: /(?<n>foo) \g{n}/ parsed_regex: /(?<n>foo) \g{n}/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+10_y: OK regex: /(?<as>as) (\w+) \g{as} (\w+)/ parsed_regex: /(?<as>as) (\w+) \g{as} (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+11_y: OK regex: /(?'n'foo) \k<n>/ parsed_regex: /(?'n'foo) \k<n>/ str: ..foo foo.. result_expr: $1 expected_results foo
+12_yM: OK regex: /(?'n'foo) \k<n>/ parsed_regex: /(?'n'foo) \k<n>/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+13_y: OK regex: /(?<n>foo) \k'n'/ parsed_regex: /(?<n>foo) \k'n'/ str: ..foo foo.. result_expr: $1 expected_results foo
+14_yM: OK regex: /(?<n>foo) \k'n'/ parsed_regex: /(?<n>foo) \k'n'/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+15_yM: OK regex: /(?'a1'foo) \k'a1'/ parsed_regex: /(?'a1'foo) \k'a1'/ str: ..foo foo.. result_expr: $+{a1} expected_results foo
+16_yM: OK regex: /(?<a1>foo) \k<a1>/ parsed_regex: /(?<a1>foo) \k<a1>/ str: ..foo foo.. result_expr: $+{a1} expected_results foo
+17_yM: OK regex: /(?'_'foo) \k'_'/ parsed_regex: /(?'_'foo) \k'_'/ str: ..foo foo.. result_expr: $+{_} expected_results foo
+18_yM: OK regex: /(?<_>foo) \k<_>/ parsed_regex: /(?<_>foo) \k<_>/ str: ..foo foo.. result_expr: $+{_} expected_results foo
+19_yM: OK regex: /(?'_0_'foo) \k'_0_'/ parsed_regex: /(?'_0_'foo) \k'_0_'/ str: ..foo foo.. result_expr: $+{_0_} expected_results foo
+20_yM: OK regex: /(?<_0_>foo) \k<_0_>/ parsed_regex: /(?<_0_>foo) \k<_0_>/ str: ..foo foo.. result_expr: $+{_0_} expected_results foo
+21_y: OK regex: /(?<as>as) (\w+) \k<as> (\w+)/ parsed_regex: /(?<as>as) (\w+) \k<as> (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+22_y: OK regex: /(?<as>as) (\w+) \k{as} (\w+)/ parsed_regex: /(?<as>as) (\w+) \k{as} (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+23_y: OK regex: /(?<as>as) (\w+) \k'as' (\w+)/ parsed_regex: /(?<as>as) (\w+) \k'as' (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+24_y: OK regex: /(?<as>as) (\w+) \k{ as } (\w+)/ parsed_regex: /(?<as>as) (\w+) \k{ as } (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_11_group_references.cpp.output b/regression-tests/test-results/clang-18-c++20/pure2-regex_11_group_references.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_12_case_insensitive.cpp.execution b/regression-tests/test-results/clang-18-c++20/pure2-regex_12_case_insensitive.cpp.execution
new file mode 100644
index 000000000..4939deb24
--- /dev/null
+++ b/regression-tests/test-results/clang-18-c++20/pure2-regex_12_case_insensitive.cpp.execution
@@ -0,0 +1,121 @@
+Running tests_12_case_insensitive:
+01_y: OK regex: 'abc'i parsed_regex: 'abc'i str: ABC result_expr: $& expected_results ABC
+02_n: OK regex: 'abc'i parsed_regex: 'abc'i str: XBC result_expr: - expected_results -
+03_n: OK regex: 'abc'i parsed_regex: 'abc'i str: AXC result_expr: - expected_results -
+04_n: OK regex: 'abc'i parsed_regex: 'abc'i str: ABX result_expr: - expected_results -
+05_y: OK regex: 'abc'i parsed_regex: 'abc'i str: XABCY result_expr: $& expected_results ABC
+06_y: OK regex: 'abc'i parsed_regex: 'abc'i str: ABABC result_expr: $& expected_results ABC
+07_y: OK regex: 'ab*c'i parsed_regex: 'ab*c'i str: ABC result_expr: $& expected_results ABC
+08_y: OK regex: 'ab*bc'i parsed_regex: 'ab*bc'i str: ABC result_expr: $& expected_results ABC
+09_y: OK regex: 'ab*bc'i parsed_regex: 'ab*bc'i str: ABBC result_expr: $& expected_results ABBC
+10_y: OK regex: 'ab*?bc'i parsed_regex: 'ab*?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+11_y: OK regex: 'ab{0,}?bc'i parsed_regex: 'ab{0,}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+12_y: OK regex: 'ab+?bc'i parsed_regex: 'ab+?bc'i str: ABBC result_expr: $& expected_results ABBC
+13_n: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABC result_expr: - expected_results -
+14_n: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABQ result_expr: - expected_results -
+15_n: OK regex: 'ab{1,}bc'i parsed_regex: 'ab{1,}bc'i str: ABQ result_expr: - expected_results -
+16_y: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+17_y: OK regex: 'ab{1,}?bc'i parsed_regex: 'ab{1,}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+18_y: OK regex: 'ab{1,3}?bc'i parsed_regex: 'ab{1,3}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+19_y: OK regex: 'ab{3,4}?bc'i parsed_regex: 'ab{3,4}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+20_n: OK regex: 'ab{4,5}?bc'i parsed_regex: 'ab{4,5}?bc'i str: ABBBBC result_expr: - expected_results -
+21_y: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABBC result_expr: $& expected_results ABBC
+22_y: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABC result_expr: $& expected_results ABC
+23_y: OK regex: 'ab{0,1}?bc'i parsed_regex: 'ab{0,1}?bc'i str: ABC result_expr: $& expected_results ABC
+24_n: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABBBBC result_expr: - expected_results -
+25_y: OK regex: 'ab??c'i parsed_regex: 'ab??c'i str: ABC result_expr: $& expected_results ABC
+26_y: OK regex: 'ab{0,1}?c'i parsed_regex: 'ab{0,1}?c'i str: ABC result_expr: $& expected_results ABC
+27_y: OK regex: '^abc$'i parsed_regex: '^abc$'i str: ABC result_expr: $& expected_results ABC
+28_n: OK regex: '^abc$'i parsed_regex: '^abc$'i str: ABCC result_expr: - expected_results -
+29_y: OK regex: '^abc'i parsed_regex: '^abc'i str: ABCC result_expr: $& expected_results ABC
+30_n: OK regex: '^abc$'i parsed_regex: '^abc$'i str: AABC result_expr: - expected_results -
+31_y: OK regex: 'abc$'i parsed_regex: 'abc$'i str: AABC result_expr: $& expected_results ABC
+32_y: OK regex: '^'i parsed_regex: '^'i str: ABC result_expr: $& expected_results 
+33_y: OK regex: '$'i parsed_regex: '$'i str: ABC result_expr: $& expected_results 
+34_y: OK regex: 'a.c'i parsed_regex: 'a.c'i str: ABC result_expr: $& expected_results ABC
+35_y: OK regex: 'a.c'i parsed_regex: 'a.c'i str: AXC result_expr: $& expected_results AXC
+36_y: OK regex: 'a\Nc'i parsed_regex: 'a\Nc'i str: ABC result_expr: $& expected_results ABC
+37_y: OK regex: 'a.*?c'i parsed_regex: 'a.*?c'i str: AXYZC result_expr: $& expected_results AXYZC
+38_n: OK regex: 'a.*c'i parsed_regex: 'a.*c'i str: AXYZD result_expr: - expected_results -
+39_n: OK regex: 'a[bc]d'i parsed_regex: 'a[bc]d'i str: ABC result_expr: - expected_results -
+40_y: OK regex: 'a[bc]d'i parsed_regex: 'a[bc]d'i str: ABD result_expr: $& expected_results ABD
+41_n: OK regex: 'a[b-d]e'i parsed_regex: 'a[b-d]e'i str: ABD result_expr: - expected_results -
+42_y: OK regex: 'a[b-d]e'i parsed_regex: 'a[b-d]e'i str: ACE result_expr: $& expected_results ACE
+43_y: OK regex: 'a[b-d]'i parsed_regex: 'a[b-d]'i str: AAC result_expr: $& expected_results AC
+44_y: OK regex: 'a[-b]'i parsed_regex: 'a[-b]'i str: A- result_expr: $& expected_results A-
+45_y: OK regex: 'a[b-]'i parsed_regex: 'a[b-]'i str: A- result_expr: $& expected_results A-
+46_y: OK regex: 'a]'i parsed_regex: 'a]'i str: A] result_expr: $& expected_results A]
+47_y: OK regex: 'a[]]b'i parsed_regex: 'a[]]b'i str: A]B result_expr: $& expected_results A]B
+48_y: OK regex: 'a[^bc]d'i parsed_regex: 'a[^bc]d'i str: AED result_expr: $& expected_results AED
+49_n: OK regex: 'a[^bc]d'i parsed_regex: 'a[^bc]d'i str: ABD result_expr: - expected_results -
+50_y: OK regex: 'a[^-b]c'i parsed_regex: 'a[^-b]c'i str: ADC result_expr: $& expected_results ADC
+51_n: OK regex: 'a[^-b]c'i parsed_regex: 'a[^-b]c'i str: A-C result_expr: - expected_results -
+52_n: OK regex: 'a[^]b]c'i parsed_regex: 'a[^]b]c'i str: A]C result_expr: - expected_results -
+53_y: OK regex: 'a[^]b]c'i parsed_regex: 'a[^]b]c'i str: ADC result_expr: $& expected_results ADC
+54_y: OK regex: 'ab|cd'i parsed_regex: 'ab|cd'i str: ABC result_expr: $& expected_results AB
+55_y: OK regex: 'ab|cd'i parsed_regex: 'ab|cd'i str: ABCD result_expr: $& expected_results AB
+56_y: OK regex: '()ef'i parsed_regex: '()ef'i str: DEF result_expr: $&-$1 expected_results EF-
+57_n: OK regex: '$b'i parsed_regex: '$b'i str: B result_expr: - expected_results -
+58_y: OK regex: 'a\(b'i parsed_regex: 'a\(b'i str: A(B result_expr: $&-$1 expected_results A(B-
+59_y: OK regex: 'a\(*b'i parsed_regex: 'a\(*b'i str: AB result_expr: $& expected_results AB
+60_y: OK regex: 'a\(*b'i parsed_regex: 'a\(*b'i str: A((B result_expr: $& expected_results A((B
+61_y: OK regex: 'a\\b'i parsed_regex: 'a\\b'i str: A\B result_expr: $& expected_results A\B
+62_y: OK regex: '((a))'i parsed_regex: '((a))'i str: ABC result_expr: $&-$1-$2 expected_results A-A-A
+63_y: OK regex: '(a)b(c)'i parsed_regex: '(a)b(c)'i str: ABC result_expr: $&-$1-$2 expected_results ABC-A-C
+64_y: OK regex: 'a+b+c'i parsed_regex: 'a+b+c'i str: AABBABC result_expr: $& expected_results ABC
+65_y: OK regex: 'a{1,}b{1,}c'i parsed_regex: 'a{1,}b{1,}c'i str: AABBABC result_expr: $& expected_results ABC
+66_y: OK regex: 'a.+?c'i parsed_regex: 'a.+?c'i str: ABCABC result_expr: $& expected_results ABC
+67_y: OK regex: 'a.*?c'i parsed_regex: 'a.*?c'i str: ABCABC result_expr: $& expected_results ABC
+68_y: OK regex: 'a.{0,5}?c'i parsed_regex: 'a.{0,5}?c'i str: ABCABC result_expr: $& expected_results ABC
+69_y: OK regex: '(a+|b)*'i parsed_regex: '(a+|b)*'i str: AB result_expr: $&-$1 expected_results AB-B
+70_y: OK regex: '(a+|b){0,}'i parsed_regex: '(a+|b){0,}'i str: AB result_expr: $&-$1 expected_results AB-B
+71_y: OK regex: '(a+|b)+'i parsed_regex: '(a+|b)+'i str: AB result_expr: $&-$1 expected_results AB-B
+72_y: OK regex: '(a+|b){1,}'i parsed_regex: '(a+|b){1,}'i str: AB result_expr: $&-$1 expected_results AB-B
+73_y: OK regex: '(a+|b)?'i parsed_regex: '(a+|b)?'i str: AB result_expr: $&-$1 expected_results A-A
+74_y: OK regex: '(a+|b){0,1}'i parsed_regex: '(a+|b){0,1}'i str: AB result_expr: $&-$1 expected_results A-A
+75_y: OK regex: '(a+|b){0,1}?'i parsed_regex: '(a+|b){0,1}?'i str: AB result_expr: $&-$1 expected_results -
+76_y: OK regex: '[^ab]*'i parsed_regex: '[^ab]*'i str: CDE result_expr: $& expected_results CDE
+77_n: OK regex: 'abc'i parsed_regex: 'abc'i str:  result_expr: - expected_results -
+78_y: OK regex: 'a*'i parsed_regex: 'a*'i str:  result_expr: $& expected_results 
+79_y: OK regex: '([abc])*d'i parsed_regex: '([abc])*d'i str: ABBBCD result_expr: $&-$1 expected_results ABBBCD-C
+80_y: OK regex: '([abc])*bcd'i parsed_regex: '([abc])*bcd'i str: ABCD result_expr: $&-$1 expected_results ABCD-A
+81_y: OK regex: 'a|b|c|d|e'i parsed_regex: 'a|b|c|d|e'i str: E result_expr: $& expected_results E
+82_y: OK regex: '(a|b|c|d|e)f'i parsed_regex: '(a|b|c|d|e)f'i str: EF result_expr: $&-$1 expected_results EF-E
+83_y: OK regex: 'abcd*efg'i parsed_regex: 'abcd*efg'i str: ABCDEFG result_expr: $& expected_results ABCDEFG
+84_y: OK regex: 'ab*'i parsed_regex: 'ab*'i str: XABYABBBZ result_expr: $& expected_results AB
+85_y: OK regex: 'ab*'i parsed_regex: 'ab*'i str: XAYABBBZ result_expr: $& expected_results A
+86_y: OK regex: '(ab|cd)e'i parsed_regex: '(ab|cd)e'i str: ABCDE result_expr: $&-$1 expected_results CDE-CD
+87_y: OK regex: '[abhgefdc]ij'i parsed_regex: '[abhgefdc]ij'i str: HIJ result_expr: $& expected_results HIJ
+88_n: OK regex: '^(ab|cd)e'i parsed_regex: '^(ab|cd)e'i str: ABCDE result_expr: x$1y expected_results XY
+89_y: OK regex: '(abc|)ef'i parsed_regex: '(abc|)ef'i str: ABCDEF result_expr: $&-$1 expected_results EF-
+90_y: OK regex: '(a|b)c*d'i parsed_regex: '(a|b)c*d'i str: ABCD result_expr: $&-$1 expected_results BCD-B
+91_y: OK regex: '(ab|ab*)bc'i parsed_regex: '(ab|ab*)bc'i str: ABC result_expr: $&-$1 expected_results ABC-A
+92_y: OK regex: 'a([bc]*)c*'i parsed_regex: 'a([bc]*)c*'i str: ABC result_expr: $&-$1 expected_results ABC-BC
+93_y: OK regex: 'a([bc]*)(c*d)'i parsed_regex: 'a([bc]*)(c*d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-BC-D
+94_y: OK regex: 'a([bc]+)(c*d)'i parsed_regex: 'a([bc]+)(c*d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-BC-D
+95_y: OK regex: 'a([bc]*)(c+d)'i parsed_regex: 'a([bc]*)(c+d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-B-CD
+96_y: OK regex: 'a[bcd]*dcdcde'i parsed_regex: 'a[bcd]*dcdcde'i str: ADCDCDE result_expr: $& expected_results ADCDCDE
+97_n: OK regex: 'a[bcd]+dcdcde'i parsed_regex: 'a[bcd]+dcdcde'i str: ADCDCDE result_expr: - expected_results -
+98_y: OK regex: '(ab|a)b*c'i parsed_regex: '(ab|a)b*c'i str: ABC result_expr: $&-$1 expected_results ABC-AB
+99_y: OK regex: '((a)(b)c)(d)'i parsed_regex: '((a)(b)c)(d)'i str: ABCD result_expr: $1-$2-$3-$4 expected_results ABC-A-B-D
+100_y: OK regex: '[a-zA-Z_][a-zA-Z0-9_]*'i parsed_regex: '[a-zA-Z_][a-zA-Z0-9_]*'i str: ALPHA result_expr: $& expected_results ALPHA
+101_y: OK regex: '^a(bc+|b[eh])g|.h$'i parsed_regex: '^a(bc+|b[eh])g|.h$'i str: ABH result_expr: $&-$1 expected_results BH-
+102_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: EFFGZ result_expr: $&-$1-$2 expected_results EFFGZ-EFFGZ-
+103_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: IJ result_expr: $&-$1-$2 expected_results IJ-IJ-J
+104_n: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: EFFG result_expr: - expected_results -
+105_n: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: BCDD result_expr: - expected_results -
+106_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: REFFGZ result_expr: $&-$1-$2 expected_results EFFGZ-EFFGZ-
+107_y: OK regex: '((((((((((a))))))))))'i parsed_regex: '((((((((((a))))))))))'i str: A result_expr: $10 expected_results A
+108_y: OK regex: '((((((((((a))))))))))\10'i parsed_regex: '((((((((((a))))))))))\10'i str: AA result_expr: $& expected_results AA
+109_y: OK regex: '(((((((((a)))))))))'i parsed_regex: '(((((((((a)))))))))'i str: A result_expr: $& expected_results A
+110_n: OK regex: 'multiple words of text'i parsed_regex: 'multiple words of text'i str: UH-UH result_expr: - expected_results -
+111_y: OK regex: 'multiple words'i parsed_regex: 'multiple words'i str: MULTIPLE WORDS, YEAH result_expr: $& expected_results MULTIPLE WORDS
+112_y: OK regex: '(.*)c(.*)'i parsed_regex: '(.*)c(.*)'i str: ABCDE result_expr: $&-$1-$2 expected_results ABCDE-AB-DE
+113_y: OK regex: '\((.*), (.*)\)'i parsed_regex: '\((.*), (.*)\)'i str: (A, B) result_expr: ($2, $1) expected_results (B, A)
+114_n: OK regex: '[k]'i parsed_regex: '[k]'i str: AB result_expr: - expected_results -
+115_y: OK regex: 'abcd'i parsed_regex: 'abcd'i str: ABCD result_expr: $& expected_results ABCD
+116_y: OK regex: 'a(bc)d'i parsed_regex: 'a(bc)d'i str: ABCD result_expr: $1 expected_results BC
+117_y: OK regex: 'a[-]?c'i parsed_regex: 'a[-]?c'i str: AC result_expr: $& expected_results AC
+118_y: OK regex: '(abc)\1'i parsed_regex: '(abc)\1'i str: ABCABC result_expr: $1 expected_results ABC
+119_y: OK regex: '([a-c]*)\1'i parsed_regex: '([a-c]*)\1'i str: ABCABC result_expr: $1 expected_results ABC
+
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_12_case_insensitive.cpp.output b/regression-tests/test-results/clang-18-c++20/pure2-regex_12_case_insensitive.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_13_posessive_modifier.cpp.execution b/regression-tests/test-results/clang-18-c++20/pure2-regex_13_posessive_modifier.cpp.execution
new file mode 100644
index 000000000..916d1a084
--- /dev/null
+++ b/regression-tests/test-results/clang-18-c++20/pure2-regex_13_posessive_modifier.cpp.execution
@@ -0,0 +1,50 @@
+Running tests_13_posessive_modifier:
+01_n: OK regex: a++a parsed_regex: a++a str: aaaaa result_expr: - expected_results -
+02_n: OK regex: a*+a parsed_regex: a*+a str: aaaaa result_expr: - expected_results -
+03_n: OK regex: a{1,5}+a parsed_regex: a{1,5}+a str: aaaaa result_expr: - expected_results -
+04_n: OK regex: a?+a parsed_regex: a?+a str: ab result_expr: - expected_results -
+05_y: OK regex: a++b parsed_regex: a++b str: aaaaab result_expr: $& expected_results aaaaab
+06_y: OK regex: a*+b parsed_regex: a*+b str: aaaaab result_expr: $& expected_results aaaaab
+07_y: OK regex: a{1,5}+b parsed_regex: a{1,5}+b str: aaaaab result_expr: $& expected_results aaaaab
+08_y: OK regex: a?+b parsed_regex: a?+b str: ab result_expr: $& expected_results ab
+09_n: OK regex: fooa++a parsed_regex: fooa++a str: fooaaaaa result_expr: - expected_results -
+10_n: OK regex: fooa*+a parsed_regex: fooa*+a str: fooaaaaa result_expr: - expected_results -
+11_n: OK regex: fooa{1,5}+a parsed_regex: fooa{1,5}+a str: fooaaaaa result_expr: - expected_results -
+12_n: OK regex: fooa?+a parsed_regex: fooa?+a str: fooab result_expr: - expected_results -
+13_y: OK regex: fooa++b parsed_regex: fooa++b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+14_y: OK regex: fooa*+b parsed_regex: fooa*+b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+15_y: OK regex: fooa{1,5}+b parsed_regex: fooa{1,5}+b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+16_y: OK regex: fooa?+b parsed_regex: fooa?+b str: fooab result_expr: $& expected_results fooab
+17_n: OK regex: (aA)++(aA) parsed_regex: (aA)++(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+18_n: OK regex: (aA|bB)++(aA|bB) parsed_regex: (aA|bB)++(aA|bB) str: aAaAbBaAbB result_expr: - expected_results aAaAbBaAbB
+19_n: OK regex: (aA)*+(aA) parsed_regex: (aA)*+(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+20_n: OK regex: (aA|bB)*+(aA|bB) parsed_regex: (aA|bB)*+(aA|bB) str: aAaAbBaAaA result_expr: - expected_results aAaAbBaAaA
+21_n: OK regex: (aA){1,5}+(aA) parsed_regex: (aA){1,5}+(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+22_n: OK regex: (aA|bB){1,5}+(aA|bB) parsed_regex: (aA|bB){1,5}+(aA|bB) str: aAaAbBaAaA result_expr: - expected_results aAaAbBaAaA
+23_n: OK regex: (aA)?+(aA) parsed_regex: (aA)?+(aA) str: aAb result_expr: - expected_results aAb
+24_n: OK regex: (aA|bB)?+(aA|bB) parsed_regex: (aA|bB)?+(aA|bB) str: bBb result_expr: - expected_results bBb
+25_y: OK regex: (aA)++b parsed_regex: (aA)++b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+26_y: OK regex: (aA|bB)++b parsed_regex: (aA|bB)++b str: aAbBaAaAbBb result_expr: $& expected_results aAbBaAaAbBb
+27_y: OK regex: (aA)*+b parsed_regex: (aA)*+b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+28_y: OK regex: (aA|bB)*+b parsed_regex: (aA|bB)*+b str: bBbBbBbBbBb result_expr: $& expected_results bBbBbBbBbBb
+29_y: OK regex: (aA){1,5}+b parsed_regex: (aA){1,5}+b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+30_y: OK regex: (aA|bB){1,5}+b parsed_regex: (aA|bB){1,5}+b str: bBaAbBaAbBb result_expr: $& expected_results bBaAbBaAbBb
+31_y: OK regex: (aA)?+b parsed_regex: (aA)?+b str: aAb result_expr: $& expected_results aAb
+32_y: OK regex: (aA|bB)?+b parsed_regex: (aA|bB)?+b str: bBb result_expr: $& expected_results bBb
+33_n: OK regex: foo(aA)++(aA) parsed_regex: foo(aA)++(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+34_n: OK regex: foo(aA|bB)++(aA|bB) parsed_regex: foo(aA|bB)++(aA|bB) str: foobBbBbBaAaA result_expr: - expected_results foobBbBbBaAaA
+35_n: OK regex: foo(aA)*+(aA) parsed_regex: foo(aA)*+(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+36_n: OK regex: foo(aA|bB)*+(aA|bB) parsed_regex: foo(aA|bB)*+(aA|bB) str: foobBaAbBaAaA result_expr: - expected_results foobBaAbBaAaA
+37_n: OK regex: foo(aA){1,5}+(aA) parsed_regex: foo(aA){1,5}+(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+38_n: OK regex: foo(aA|bB){1,5}+(aA|bB) parsed_regex: foo(aA|bB){1,5}+(aA|bB) str: fooaAbBbBaAaA result_expr: - expected_results fooaAbBbBaAaA
+39_n: OK regex: foo(aA)?+(aA) parsed_regex: foo(aA)?+(aA) str: fooaAb result_expr: - expected_results fooaAb
+40_n: OK regex: foo(aA|bB)?+(aA|bB) parsed_regex: foo(aA|bB)?+(aA|bB) str: foobBb result_expr: - expected_results foobBb
+41_y: OK regex: foo(aA)++b parsed_regex: foo(aA)++b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+42_y: OK regex: foo(aA|bB)++b parsed_regex: foo(aA|bB)++b str: foobBaAbBaAbBb result_expr: $& expected_results foobBaAbBaAbBb
+43_y: OK regex: foo(aA)*+b parsed_regex: foo(aA)*+b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+44_y: OK regex: foo(aA|bB)*+b parsed_regex: foo(aA|bB)*+b str: foobBbBaAaAaAb result_expr: $& expected_results foobBbBaAaAaAb
+45_y: OK regex: foo(aA){1,5}+b parsed_regex: foo(aA){1,5}+b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+46_y: OK regex: foo(aA|bB){1,5}+b parsed_regex: foo(aA|bB){1,5}+b str: foobBaAaAaAaAb result_expr: $& expected_results foobBaAaAaAaAb
+47_y: OK regex: foo(aA)?+b parsed_regex: foo(aA)?+b str: fooaAb result_expr: $& expected_results fooaAb
+48_y: OK regex: foo(aA|bB)?+b parsed_regex: foo(aA|bB)?+b str: foobBb result_expr: $& expected_results foobBb
+
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_13_posessive_modifier.cpp.output b/regression-tests/test-results/clang-18-c++20/pure2-regex_13_posessive_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_14_multiline_modifier.cpp.execution b/regression-tests/test-results/clang-18-c++20/pure2-regex_14_multiline_modifier.cpp.execution
new file mode 100644
index 000000000..9a12081ac
--- /dev/null
+++ b/regression-tests/test-results/clang-18-c++20/pure2-regex_14_multiline_modifier.cpp.execution
@@ -0,0 +1,533 @@
+Running tests_14_multiline_modifier:
+01_y: OK regex: \Z parsed_regex: \Z str: a
+b
+ result_expr: $-[0] expected_results 3
+02_y: OK regex: \z parsed_regex: \z str: a
+b
+ result_expr: $-[0] expected_results 4
+03_y: OK regex: $ parsed_regex: $ str: a
+b
+ result_expr: $-[0] expected_results 3
+04_y: OK regex: \Z parsed_regex: \Z str: b
+a
+ result_expr: $-[0] expected_results 3
+05_y: OK regex: \z parsed_regex: \z str: b
+a
+ result_expr: $-[0] expected_results 4
+06_y: OK regex: $ parsed_regex: $ str: b
+a
+ result_expr: $-[0] expected_results 3
+07_y: OK regex: \Z parsed_regex: \Z str: b
+a result_expr: $-[0] expected_results 3
+08_y: OK regex: \z parsed_regex: \z str: b
+a result_expr: $-[0] expected_results 3
+09_y: OK regex: $ parsed_regex: $ str: b
+a result_expr: $-[0] expected_results 3
+10_y: OK regex: '\Z'm parsed_regex: '\Z'm str: a
+b
+ result_expr: $-[0] expected_results 3
+11_y: OK regex: '\z'm parsed_regex: '\z'm str: a
+b
+ result_expr: $-[0] expected_results 4
+12_y: OK regex: '$'m parsed_regex: '$'m str: a
+b
+ result_expr: $-[0] expected_results 1
+13_y: OK regex: '\Z'm parsed_regex: '\Z'm str: b
+a
+ result_expr: $-[0] expected_results 3
+14_y: OK regex: '\z'm parsed_regex: '\z'm str: b
+a
+ result_expr: $-[0] expected_results 4
+15_y: OK regex: '$'m parsed_regex: '$'m str: b
+a
+ result_expr: $-[0] expected_results 1
+16_y: OK regex: '\Z'm parsed_regex: '\Z'm str: b
+a result_expr: $-[0] expected_results 3
+17_y: OK regex: '\z'm parsed_regex: '\z'm str: b
+a result_expr: $-[0] expected_results 3
+18_y: OK regex: '$'m parsed_regex: '$'m str: b
+a result_expr: $-[0] expected_results 1
+19_n: OK regex: a\Z parsed_regex: a\Z str: a
+b
+ result_expr: - expected_results -
+20_n: OK regex: a\z parsed_regex: a\z str: a
+b
+ result_expr: - expected_results -
+21_n: OK regex: a$ parsed_regex: a$ str: a
+b
+ result_expr: - expected_results -
+22_y: OK regex: a\Z parsed_regex: a\Z str: b
+a
+ result_expr: $-[0] expected_results 2
+23_n: OK regex: a\z parsed_regex: a\z str: b
+a
+ result_expr: - expected_results -
+24_y: OK regex: a$ parsed_regex: a$ str: b
+a
+ result_expr: $-[0] expected_results 2
+25_y: OK regex: a\Z parsed_regex: a\Z str: b
+a result_expr: $-[0] expected_results 2
+26_y: OK regex: a\z parsed_regex: a\z str: b
+a result_expr: $-[0] expected_results 2
+27_y: OK regex: a$ parsed_regex: a$ str: b
+a result_expr: $-[0] expected_results 2
+28_n: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: a
+b
+ result_expr: - expected_results -
+29_n: OK regex: 'a\z'm parsed_regex: 'a\z'm str: a
+b
+ result_expr: - expected_results -
+30_y: OK regex: 'a$'m parsed_regex: 'a$'m str: a
+b
+ result_expr: $-[0] expected_results 0
+31_y: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: b
+a
+ result_expr: $-[0] expected_results 2
+32_n: OK regex: 'a\z'm parsed_regex: 'a\z'm str: b
+a
+ result_expr: - expected_results -
+33_y: OK regex: 'a$'m parsed_regex: 'a$'m str: b
+a
+ result_expr: $-[0] expected_results 2
+34_y: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: b
+a result_expr: $-[0] expected_results 2
+35_y: OK regex: 'a\z'm parsed_regex: 'a\z'm str: b
+a result_expr: $-[0] expected_results 2
+36_y: OK regex: 'a$'m parsed_regex: 'a$'m str: b
+a result_expr: $-[0] expected_results 2
+37_n: OK regex: aa\Z parsed_regex: aa\Z str: aa
+b
+ result_expr: - expected_results -
+38_n: OK regex: aa\z parsed_regex: aa\z str: aa
+b
+ result_expr: - expected_results -
+39_n: OK regex: aa$ parsed_regex: aa$ str: aa
+b
+ result_expr: - expected_results -
+40_y: OK regex: aa\Z parsed_regex: aa\Z str: b
+aa
+ result_expr: $-[0] expected_results 2
+41_n: OK regex: aa\z parsed_regex: aa\z str: b
+aa
+ result_expr: - expected_results -
+42_y: OK regex: aa$ parsed_regex: aa$ str: b
+aa
+ result_expr: $-[0] expected_results 2
+43_y: OK regex: aa\Z parsed_regex: aa\Z str: b
+aa result_expr: $-[0] expected_results 2
+44_y: OK regex: aa\z parsed_regex: aa\z str: b
+aa result_expr: $-[0] expected_results 2
+45_y: OK regex: aa$ parsed_regex: aa$ str: b
+aa result_expr: $-[0] expected_results 2
+46_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: aa
+b
+ result_expr: - expected_results -
+47_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: aa
+b
+ result_expr: - expected_results -
+48_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: aa
+b
+ result_expr: $-[0] expected_results 0
+49_y: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+aa
+ result_expr: $-[0] expected_results 2
+50_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+aa
+ result_expr: - expected_results -
+51_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+aa
+ result_expr: $-[0] expected_results 2
+52_y: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+aa result_expr: $-[0] expected_results 2
+53_y: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+aa result_expr: $-[0] expected_results 2
+54_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+aa result_expr: $-[0] expected_results 2
+55_n: OK regex: aa\Z parsed_regex: aa\Z str: ac
+b
+ result_expr: - expected_results -
+56_n: OK regex: aa\z parsed_regex: aa\z str: ac
+b
+ result_expr: - expected_results -
+57_n: OK regex: aa$ parsed_regex: aa$ str: ac
+b
+ result_expr: - expected_results -
+58_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ac
+ result_expr: - expected_results -
+59_n: OK regex: aa\z parsed_regex: aa\z str: b
+ac
+ result_expr: - expected_results -
+60_n: OK regex: aa$ parsed_regex: aa$ str: b
+ac
+ result_expr: - expected_results -
+61_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ac result_expr: - expected_results -
+62_n: OK regex: aa\z parsed_regex: aa\z str: b
+ac result_expr: - expected_results -
+63_n: OK regex: aa$ parsed_regex: aa$ str: b
+ac result_expr: - expected_results -
+64_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: ac
+b
+ result_expr: - expected_results -
+65_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: ac
+b
+ result_expr: - expected_results -
+66_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: ac
+b
+ result_expr: - expected_results -
+67_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ac
+ result_expr: - expected_results -
+68_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ac
+ result_expr: - expected_results -
+69_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ac
+ result_expr: - expected_results -
+70_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ac result_expr: - expected_results -
+71_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ac result_expr: - expected_results -
+72_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ac result_expr: - expected_results -
+73_n: OK regex: aa\Z parsed_regex: aa\Z str: ca
+b
+ result_expr: - expected_results -
+74_n: OK regex: aa\z parsed_regex: aa\z str: ca
+b
+ result_expr: - expected_results -
+75_n: OK regex: aa$ parsed_regex: aa$ str: ca
+b
+ result_expr: - expected_results -
+76_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ca
+ result_expr: - expected_results -
+77_n: OK regex: aa\z parsed_regex: aa\z str: b
+ca
+ result_expr: - expected_results -
+78_n: OK regex: aa$ parsed_regex: aa$ str: b
+ca
+ result_expr: - expected_results -
+79_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ca result_expr: - expected_results -
+80_n: OK regex: aa\z parsed_regex: aa\z str: b
+ca result_expr: - expected_results -
+81_n: OK regex: aa$ parsed_regex: aa$ str: b
+ca result_expr: - expected_results -
+82_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: ca
+b
+ result_expr: - expected_results -
+83_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: ca
+b
+ result_expr: - expected_results -
+84_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: ca
+b
+ result_expr: - expected_results -
+85_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ca
+ result_expr: - expected_results -
+86_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ca
+ result_expr: - expected_results -
+87_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ca
+ result_expr: - expected_results -
+88_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ca result_expr: - expected_results -
+89_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ca result_expr: - expected_results -
+90_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ca result_expr: - expected_results -
+91_n: OK regex: ab\Z parsed_regex: ab\Z str: ab
+b
+ result_expr: - expected_results -
+92_n: OK regex: ab\z parsed_regex: ab\z str: ab
+b
+ result_expr: - expected_results -
+93_n: OK regex: ab$ parsed_regex: ab$ str: ab
+b
+ result_expr: - expected_results -
+94_y: OK regex: ab\Z parsed_regex: ab\Z str: b
+ab
+ result_expr: $-[0] expected_results 2
+95_n: OK regex: ab\z parsed_regex: ab\z str: b
+ab
+ result_expr: - expected_results -
+96_y: OK regex: ab$ parsed_regex: ab$ str: b
+ab
+ result_expr: $-[0] expected_results 2
+97_y: OK regex: ab\Z parsed_regex: ab\Z str: b
+ab result_expr: $-[0] expected_results 2
+98_y: OK regex: ab\z parsed_regex: ab\z str: b
+ab result_expr: $-[0] expected_results 2
+99_y: OK regex: ab$ parsed_regex: ab$ str: b
+ab result_expr: $-[0] expected_results 2
+100_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ab
+b
+ result_expr: - expected_results -
+101_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ab
+b
+ result_expr: - expected_results -
+102_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ab
+b
+ result_expr: $-[0] expected_results 0
+103_y: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ab
+ result_expr: $-[0] expected_results 2
+104_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ab
+ result_expr: - expected_results -
+105_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ab
+ result_expr: $-[0] expected_results 2
+106_y: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ab result_expr: $-[0] expected_results 2
+107_y: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ab result_expr: $-[0] expected_results 2
+108_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ab result_expr: $-[0] expected_results 2
+109_n: OK regex: ab\Z parsed_regex: ab\Z str: ac
+b
+ result_expr: - expected_results -
+110_n: OK regex: ab\z parsed_regex: ab\z str: ac
+b
+ result_expr: - expected_results -
+111_n: OK regex: ab$ parsed_regex: ab$ str: ac
+b
+ result_expr: - expected_results -
+112_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ac
+ result_expr: - expected_results -
+113_n: OK regex: ab\z parsed_regex: ab\z str: b
+ac
+ result_expr: - expected_results -
+114_n: OK regex: ab$ parsed_regex: ab$ str: b
+ac
+ result_expr: - expected_results -
+115_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ac result_expr: - expected_results -
+116_n: OK regex: ab\z parsed_regex: ab\z str: b
+ac result_expr: - expected_results -
+117_n: OK regex: ab$ parsed_regex: ab$ str: b
+ac result_expr: - expected_results -
+118_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ac
+b
+ result_expr: - expected_results -
+119_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ac
+b
+ result_expr: - expected_results -
+120_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ac
+b
+ result_expr: - expected_results -
+121_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ac
+ result_expr: - expected_results -
+122_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ac
+ result_expr: - expected_results -
+123_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ac
+ result_expr: - expected_results -
+124_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ac result_expr: - expected_results -
+125_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ac result_expr: - expected_results -
+126_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ac result_expr: - expected_results -
+127_n: OK regex: ab\Z parsed_regex: ab\Z str: ca
+b
+ result_expr: - expected_results -
+128_n: OK regex: ab\z parsed_regex: ab\z str: ca
+b
+ result_expr: - expected_results -
+129_n: OK regex: ab$ parsed_regex: ab$ str: ca
+b
+ result_expr: - expected_results -
+130_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ca
+ result_expr: - expected_results -
+131_n: OK regex: ab\z parsed_regex: ab\z str: b
+ca
+ result_expr: - expected_results -
+132_n: OK regex: ab$ parsed_regex: ab$ str: b
+ca
+ result_expr: - expected_results -
+133_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ca result_expr: - expected_results -
+134_n: OK regex: ab\z parsed_regex: ab\z str: b
+ca result_expr: - expected_results -
+135_n: OK regex: ab$ parsed_regex: ab$ str: b
+ca result_expr: - expected_results -
+136_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ca
+b
+ result_expr: - expected_results -
+137_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ca
+b
+ result_expr: - expected_results -
+138_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ca
+b
+ result_expr: - expected_results -
+139_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ca
+ result_expr: - expected_results -
+140_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ca
+ result_expr: - expected_results -
+141_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ca
+ result_expr: - expected_results -
+142_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ca result_expr: - expected_results -
+143_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ca result_expr: - expected_results -
+144_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ca result_expr: - expected_results -
+145_n: OK regex: abb\Z parsed_regex: abb\Z str: abb
+b
+ result_expr: - expected_results -
+146_n: OK regex: abb\z parsed_regex: abb\z str: abb
+b
+ result_expr: - expected_results -
+147_n: OK regex: abb$ parsed_regex: abb$ str: abb
+b
+ result_expr: - expected_results -
+148_y: OK regex: abb\Z parsed_regex: abb\Z str: b
+abb
+ result_expr: $-[0] expected_results 2
+149_n: OK regex: abb\z parsed_regex: abb\z str: b
+abb
+ result_expr: - expected_results -
+150_y: OK regex: abb$ parsed_regex: abb$ str: b
+abb
+ result_expr: $-[0] expected_results 2
+151_y: OK regex: abb\Z parsed_regex: abb\Z str: b
+abb result_expr: $-[0] expected_results 2
+152_y: OK regex: abb\z parsed_regex: abb\z str: b
+abb result_expr: $-[0] expected_results 2
+153_y: OK regex: abb$ parsed_regex: abb$ str: b
+abb result_expr: $-[0] expected_results 2
+154_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: abb
+b
+ result_expr: - expected_results -
+155_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: abb
+b
+ result_expr: - expected_results -
+156_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: abb
+b
+ result_expr: $-[0] expected_results 0
+157_y: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+abb
+ result_expr: $-[0] expected_results 2
+158_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+abb
+ result_expr: - expected_results -
+159_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+abb
+ result_expr: $-[0] expected_results 2
+160_y: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+abb result_expr: $-[0] expected_results 2
+161_y: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+abb result_expr: $-[0] expected_results 2
+162_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+abb result_expr: $-[0] expected_results 2
+163_n: OK regex: abb\Z parsed_regex: abb\Z str: ac
+b
+ result_expr: - expected_results -
+164_n: OK regex: abb\z parsed_regex: abb\z str: ac
+b
+ result_expr: - expected_results -
+165_n: OK regex: abb$ parsed_regex: abb$ str: ac
+b
+ result_expr: - expected_results -
+166_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ac
+ result_expr: - expected_results -
+167_n: OK regex: abb\z parsed_regex: abb\z str: b
+ac
+ result_expr: - expected_results -
+168_n: OK regex: abb$ parsed_regex: abb$ str: b
+ac
+ result_expr: - expected_results -
+169_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ac result_expr: - expected_results -
+170_n: OK regex: abb\z parsed_regex: abb\z str: b
+ac result_expr: - expected_results -
+171_n: OK regex: abb$ parsed_regex: abb$ str: b
+ac result_expr: - expected_results -
+172_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: ac
+b
+ result_expr: - expected_results -
+173_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: ac
+b
+ result_expr: - expected_results -
+174_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: ac
+b
+ result_expr: - expected_results -
+175_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ac
+ result_expr: - expected_results -
+176_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ac
+ result_expr: - expected_results -
+177_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ac
+ result_expr: - expected_results -
+178_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ac result_expr: - expected_results -
+179_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ac result_expr: - expected_results -
+180_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ac result_expr: - expected_results -
+181_n: OK regex: abb\Z parsed_regex: abb\Z str: ca
+b
+ result_expr: - expected_results -
+182_n: OK regex: abb\z parsed_regex: abb\z str: ca
+b
+ result_expr: - expected_results -
+183_n: OK regex: abb$ parsed_regex: abb$ str: ca
+b
+ result_expr: - expected_results -
+184_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ca
+ result_expr: - expected_results -
+185_n: OK regex: abb\z parsed_regex: abb\z str: b
+ca
+ result_expr: - expected_results -
+186_n: OK regex: abb$ parsed_regex: abb$ str: b
+ca
+ result_expr: - expected_results -
+187_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ca result_expr: - expected_results -
+188_n: OK regex: abb\z parsed_regex: abb\z str: b
+ca result_expr: - expected_results -
+189_n: OK regex: abb$ parsed_regex: abb$ str: b
+ca result_expr: - expected_results -
+190_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: ca
+b
+ result_expr: - expected_results -
+191_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: ca
+b
+ result_expr: - expected_results -
+192_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: ca
+b
+ result_expr: - expected_results -
+193_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ca
+ result_expr: - expected_results -
+194_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ca
+ result_expr: - expected_results -
+195_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ca
+ result_expr: - expected_results -
+196_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ca result_expr: - expected_results -
+197_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ca result_expr: - expected_results -
+198_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ca result_expr: - expected_results -
+199_y: OK regex: '\Aa$'m parsed_regex: '\Aa$'m str: a
+
+ result_expr: $& expected_results a
+
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_14_multiline_modifier.cpp.output b/regression-tests/test-results/clang-18-c++20/pure2-regex_14_multiline_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_15_group_modifiers.cpp.execution b/regression-tests/test-results/clang-18-c++20/pure2-regex_15_group_modifiers.cpp.execution
new file mode 100644
index 000000000..de92abc48
--- /dev/null
+++ b/regression-tests/test-results/clang-18-c++20/pure2-regex_15_group_modifiers.cpp.execution
@@ -0,0 +1,87 @@
+Running tests_15_group_modifiers:
+01_y: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: ab result_expr: $& expected_results ab
+02_y: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: ab result_expr: $&:$1 expected_results ab:a
+03_y: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: Ab result_expr: $& expected_results Ab
+04_y: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: Ab result_expr: $&:$1 expected_results Ab:A
+05_n: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: aB result_expr: - expected_results -
+06_n: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: aB result_expr: - expected_results -
+07_y: OK regex: (?i:a)b parsed_regex: (?i:a)b str: ab result_expr: $& expected_results ab
+08_y: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: ab result_expr: $&:$1 expected_results ab:a
+09_y: OK regex: (?i:a)b parsed_regex: (?i:a)b str: Ab result_expr: $& expected_results Ab
+10_y: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: Ab result_expr: $&:$1 expected_results Ab:A
+11_n: OK regex: (?i:a)b parsed_regex: (?i:a)b str: aB result_expr: - expected_results -
+12_n: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: aB result_expr: - expected_results -
+13_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: ab result_expr: $& expected_results ab
+14_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: ab result_expr: $&:$1 expected_results ab:a
+15_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: aB result_expr: $& expected_results aB
+16_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: aB result_expr: $&:$1 expected_results aB:a
+17_n: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: Ab result_expr: - expected_results -
+18_n: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: Ab result_expr: - expected_results -
+19_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: aB result_expr: $& expected_results aB
+20_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: aB result_expr: $1 expected_results a
+21_n: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: AB result_expr: - expected_results -
+22_n: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: AB result_expr: - expected_results -
+23_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: ab result_expr: $& expected_results ab
+24_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: ab result_expr: $&:$1 expected_results ab:a
+25_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: aB result_expr: $& expected_results aB
+26_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: aB result_expr: $&:$1 expected_results aB:a
+27_n: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: Ab result_expr: - expected_results -
+28_n: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: Ab result_expr: - expected_results -
+29_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: aB result_expr: $& expected_results aB
+30_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: aB result_expr: $1 expected_results a
+31_n: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: AB result_expr: - expected_results -
+32_n: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: AB result_expr: - expected_results -
+33_n: OK regex: '((?-i:a.))b'i parsed_regex: '((?-i:a.))b'i str: a
+B result_expr: - expected_results -
+34_n: OK regex: '((?-i:a\N))b'i parsed_regex: '((?-i:a\N))b'i str: a
+B result_expr: - expected_results -
+35_y: OK regex: '((?s-i:a.))b'i parsed_regex: '((?s-i:a.))b'i str: a
+B result_expr: $1 expected_results a
+
+36_n: OK regex: '((?s-i:a\N))b'i parsed_regex: '((?s-i:a\N))b'i str: a
+B result_expr: - expected_results -
+37_n: OK regex: '((?s-i:a.))b'i parsed_regex: '((?s-i:a.))b'i str: B
+B result_expr: - expected_results -
+38_n: OK regex: '((?s-i:a\N))b'i parsed_regex: '((?s-i:a\N))b'i str: B
+B result_expr: - expected_results -
+39_y: OK regex: (?i:.[b].) parsed_regex: (?i:.[b].) str: abd result_expr: $& expected_results abd
+40_y: OK regex: (?i:\N[b]\N) parsed_regex: (?i:\N[b]\N) str: abd result_expr: $& expected_results abd
+41_n: OK regex: ^(?:a?b?)*$ parsed_regex: ^(?:a?b?)*$ str: a-- result_expr: - expected_results -
+42_y: OK regex: ((?s)^a(.))((?m)^b$) parsed_regex: ((?s)^a(.))((?m)^b$) str: a
+b
+c
+ result_expr: $1;$2;$3 expected_results a
+;
+;b
+43_y: OK regex: ((?m)^b$) parsed_regex: ((?m)^b$) str: a
+b
+c
+ result_expr: $1 expected_results b
+44_y: OK regex: (?m)^b parsed_regex: (?m)^b str: a
+b
+ result_expr: $& expected_results b
+45_y: OK regex: (?m)^(b) parsed_regex: (?m)^(b) str: a
+b
+ result_expr: $1 expected_results b
+46_y: OK regex: ((?m)^b) parsed_regex: ((?m)^b) str: a
+b
+ result_expr: $1 expected_results b
+47_y: OK regex: \n((?m)^b) parsed_regex: \n((?m)^b) str: a
+b
+ result_expr: $1 expected_results b
+48_n: OK regex: ^b parsed_regex: ^b str: a
+b
+c
+ result_expr: - expected_results -
+49_n: OK regex: ()^b parsed_regex: ()^b str: a
+b
+c
+ result_expr: - expected_results -
+50_y: OK regex: ((?m)^b) parsed_regex: ((?m)^b) str: a
+b
+c
+ result_expr: $1 expected_results b
+51_y: OK Warning: Parsed regex does not match. regex: '(foo)'n parsed_regex: '(?:foo)'n str: foobar result_expr: $&-$1 expected_results foo-
+52_y: OK Warning: Parsed regex does not match. regex: '(?-n)(foo)(?n)(bar)'n parsed_regex: '(?-n)(foo)(?n)(?:bar)'n str: foobar result_expr: $&-$1-$2 expected_results foobar-foo-
+53_y: OK Warning: Parsed regex does not match. regex: '(?-n:(foo)(?n:(bar)))'n parsed_regex: '(?-n:(foo)(?n:(?:bar)))'n str: foobar result_expr: $&-$1-$2 expected_results foobar-foo-
+
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_15_group_modifiers.cpp.output b/regression-tests/test-results/clang-18-c++20/pure2-regex_15_group_modifiers.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_16_perl_syntax_modifier.cpp.execution b/regression-tests/test-results/clang-18-c++20/pure2-regex_16_perl_syntax_modifier.cpp.execution
new file mode 100644
index 000000000..761720007
--- /dev/null
+++ b/regression-tests/test-results/clang-18-c++20/pure2-regex_16_perl_syntax_modifier.cpp.execution
@@ -0,0 +1,35 @@
+Running tests_16_perl_syntax_modifier:
+01_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $& expected_results a
+02_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $-[0] expected_results 0
+03_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $+[0] expected_results 1
+04_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $& expected_results abbb
+05_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $-[0] expected_results 0
+06_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $+[0] expected_results 4
+07_y: OK Warning: Parsed regex does not match. regex: /a\N c/x parsed_regex: /a\Nc/x str: abc result_expr: $& expected_results abc
+08_y: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzc result_expr: $& expected_results axyzc
+09_n: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzd result_expr: - expected_results -
+10_yS: OK regex: /[a b]/x parsed_regex: /[a b]/x str:   result_expr: $& expected_results  
+11_n: OK regex: /[a b]/xx parsed_regex: /[a b]/xx str:   result_expr: - expected_results -
+12_y: OK regex: /[a\ b]/xx parsed_regex: /[a\ b]/xx str:   result_expr: $& expected_results  
+13_n: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: a result_expr: - expected_results -
+14_n: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: b result_expr: - expected_results -
+15_y: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: A result_expr: $& expected_results A
+16_yS: OK regex: /(?x:[a b])/xx parsed_regex: /(?x:[a b])/xx str:   result_expr: $& expected_results  
+17_n: OK regex: /(?xx:[a b])/x parsed_regex: /(?xx:[a b])/x str:   result_expr: - expected_results -
+18_yS: OK regex: /(?x)[a b]/xx parsed_regex: /(?x)[a b]/xx str:   result_expr: $& expected_results  
+19_n: OK regex: /(?xx)[a b]/x parsed_regex: /(?xx)[a b]/x str:   result_expr: - expected_results -
+20_yS: OK regex: /(?-x:[a b])/xx parsed_regex: /(?-x:[a b])/xx str:   result_expr: $& expected_results  
+21_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $& expected_results a
+22_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $-[0] expected_results 0
+23_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $+[0] expected_results 1
+24_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $& expected_results abbb
+25_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $-[0] expected_results 0
+26_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $+[0] expected_results 4
+27_y: OK Warning: Parsed regex does not match. regex: /a\N c/x parsed_regex: /a\Nc/x str: abc result_expr: $& expected_results abc
+28_y: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzc result_expr: $& expected_results axyzc
+29_n: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzd result_expr: - expected_results -
+30_y: OK regex: /[#]/ parsed_regex: /[#]/ str: a#b result_expr: $& expected_results #
+31_y: OK regex: /[#]b/ parsed_regex: /[#]b/ str: a#b result_expr: $& expected_results #b
+32_y: OK regex: /[#]/x parsed_regex: /[#]/x str: a#b result_expr: $& expected_results #
+33_y: OK regex: /[#]b/x parsed_regex: /[#]b/x str: a#b result_expr: $& expected_results #b
+
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_16_perl_syntax_modifier.cpp.output b/regression-tests/test-results/clang-18-c++20/pure2-regex_16_perl_syntax_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_17_comments.cpp.execution b/regression-tests/test-results/clang-18-c++20/pure2-regex_17_comments.cpp.execution
new file mode 100644
index 000000000..17c9a5d55
--- /dev/null
+++ b/regression-tests/test-results/clang-18-c++20/pure2-regex_17_comments.cpp.execution
@@ -0,0 +1,5 @@
+Running tests_17_comments:
+01_y: OK regex: ^a(?#xxx){3}c parsed_regex: ^a(?#xxx){3}c str: aaac result_expr: $& expected_results aaac
+02_y: OK Warning: Parsed regex does not match. regex: '^a (?#xxx) (?#yyy) {3}c'x parsed_regex: '^a(?#xxx)(?#yyy){3}c'x str: aaac result_expr: $& expected_results aaac
+03_y: OK Warning: Parsed regex does not match. regex: 'foo # Match foo'x parsed_regex: 'foo'x str: foobar result_expr: $& expected_results foo
+
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_17_comments.cpp.output b/regression-tests/test-results/clang-18-c++20/pure2-regex_17_comments.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_18_branch_reset.cpp.execution b/regression-tests/test-results/clang-18-c++20/pure2-regex_18_branch_reset.cpp.execution
new file mode 100644
index 000000000..1d088ce31
--- /dev/null
+++ b/regression-tests/test-results/clang-18-c++20/pure2-regex_18_branch_reset.cpp.execution
@@ -0,0 +1,17 @@
+Running tests_18_branch_reset:
+01_y: OK regex: (?|(a)) parsed_regex: (?|(a)) str: a result_expr: $1-$+ expected_results a-a
+02_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: d!o!da result_expr: $1-$2-$3 expected_results !o!-o-a
+03_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: aabc result_expr: $1-$2-$3 expected_results a--c
+04_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: ixyjp result_expr: $1-$2-$3 expected_results x-y-p
+05_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: a result_expr: $1 expected_results a
+06_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: b result_expr: $1 expected_results b
+07_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: c result_expr: $1 expected_results c
+08_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: d result_expr: $1 expected_results d
+09_y: OK regex: (.)(?|(.)(.)x|(.)d)(.) parsed_regex: (.)(?|(.)(.)x|(.)d)(.) str: abcde result_expr: $1-$2-$3-$4-$5- expected_results b-c--e--
+10_y: OK regex: (\N)(?|(\N)(\N)x|(\N)d)(\N) parsed_regex: (\N)(?|(\N)(\N)x|(\N)d)(\N) str: abcde result_expr: $1-$2-$3-$4-$5- expected_results b-c--e--
+11_yM: OK regex: (?|(?<foo>x)) parsed_regex: (?|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+12_yM: OK regex: (?|(?<foo>x)|(?<bar>y)) parsed_regex: (?|(?<foo>x)|(?<bar>y)) str: x result_expr: $+{foo} expected_results x
+13_yM: OK regex: (?|(?<bar>y)|(?<foo>x)) parsed_regex: (?|(?<bar>y)|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+14_yM: OK regex: (?<bar>)(?|(?<foo>x)) parsed_regex: (?<bar>)(?|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+15_y: OK regex: (?|(b)|()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(a)) parsed_regex: (?|(b)|()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(a)) str: a result_expr: $& expected_results a
+
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_18_branch_reset.cpp.output b/regression-tests/test-results/clang-18-c++20/pure2-regex_18_branch_reset.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_19_lookahead.cpp.execution b/regression-tests/test-results/clang-18-c++20/pure2-regex_19_lookahead.cpp.execution
new file mode 100644
index 000000000..7b34914b1
--- /dev/null
+++ b/regression-tests/test-results/clang-18-c++20/pure2-regex_19_lookahead.cpp.execution
@@ -0,0 +1,77 @@
+Running tests_19_lookahead:
+01_y: OK regex: a(?!b). parsed_regex: a(?!b). str: abad result_expr: $& expected_results ad
+02_y: OK regex: (?=)a parsed_regex: (?=)a str: a result_expr: $& expected_results a
+03_y: OK regex: a(?=d). parsed_regex: a(?=d). str: abad result_expr: $& expected_results ad
+04_y: OK regex: a(?=c|d). parsed_regex: a(?=c|d). str: abad result_expr: $& expected_results ad
+05_y: OK regex: ^(?:b|a(?=(.)))*\1 parsed_regex: ^(?:b|a(?=(.)))*\1 str: abc result_expr: $& expected_results ab
+06_y: OK regex: (?=(a+?))(\1ab) parsed_regex: (?=(a+?))(\1ab) str: aaab result_expr: $2 expected_results aab
+07_n: OK regex: ^(?=(a+?))\1ab parsed_regex: ^(?=(a+?))\1ab str: aaab result_expr: - expected_results -
+08_y: OK regex: (?=(a+?))(\1ab) parsed_regex: (?=(a+?))(\1ab) str: aaab result_expr: $2 expected_results aab
+09_n: OK regex: ^(?=(a+?))\1ab parsed_regex: ^(?=(a+?))\1ab str: aaab result_expr: - expected_results -
+10_y: OK regex: (.*)(?=c) parsed_regex: (.*)(?=c) str: abcd result_expr: $1 expected_results ab
+11_yB: OK regex: (.*)(?=c)c parsed_regex: (.*)(?=c)c str: abcd result_expr: $1 expected_results ab
+12_y: OK regex: (.*)(?=b|c) parsed_regex: (.*)(?=b|c) str: abcd result_expr: $1 expected_results ab
+13_y: OK regex: (.*)(?=b|c)c parsed_regex: (.*)(?=b|c)c str: abcd result_expr: $1 expected_results ab
+14_y: OK regex: (.*)(?=c|b) parsed_regex: (.*)(?=c|b) str: abcd result_expr: $1 expected_results ab
+15_y: OK regex: (.*)(?=c|b)c parsed_regex: (.*)(?=c|b)c str: abcd result_expr: $1 expected_results ab
+16_y: OK regex: (.*)(?=[bc]) parsed_regex: (.*)(?=[bc]) str: abcd result_expr: $1 expected_results ab
+17_yB: OK regex: (.*)(?=[bc])c parsed_regex: (.*)(?=[bc])c str: abcd result_expr: $1 expected_results ab
+18_y: OK regex: (.*?)(?=c) parsed_regex: (.*?)(?=c) str: abcd result_expr: $1 expected_results ab
+19_yB: OK regex: (.*?)(?=c)c parsed_regex: (.*?)(?=c)c str: abcd result_expr: $1 expected_results ab
+20_y: OK regex: (.*?)(?=b|c) parsed_regex: (.*?)(?=b|c) str: abcd result_expr: $1 expected_results a
+21_y: OK regex: (.*?)(?=b|c)c parsed_regex: (.*?)(?=b|c)c str: abcd result_expr: $1 expected_results ab
+22_y: OK regex: (.*?)(?=c|b) parsed_regex: (.*?)(?=c|b) str: abcd result_expr: $1 expected_results a
+23_y: OK regex: (.*?)(?=c|b)c parsed_regex: (.*?)(?=c|b)c str: abcd result_expr: $1 expected_results ab
+24_y: OK regex: (.*?)(?=[bc]) parsed_regex: (.*?)(?=[bc]) str: abcd result_expr: $1 expected_results a
+25_yB: OK regex: (.*?)(?=[bc])c parsed_regex: (.*?)(?=[bc])c str: abcd result_expr: $1 expected_results ab
+26_y: OK regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) parsed_regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) str: aaaaaaaa result_expr: $1 expected_results aaaaaaa
+27_y: OK regex: a(?!b(?!c))(..) parsed_regex: a(?!b(?!c))(..) str: abababc result_expr: $1 expected_results bc
+28_y: OK regex: a(?!b(?=a))(..) parsed_regex: a(?!b(?=a))(..) str: abababc result_expr: $1 expected_results bc
+37_y: OK regex: X(\w+)(?=\s)|X(\w+) parsed_regex: X(\w+)(?=\s)|X(\w+) str: Xab result_expr: [$1-$2] expected_results [-ab]
+38_y: OK regex: ^a*(?=b)b parsed_regex: ^a*(?=b)b str: ab result_expr: $& expected_results ab
+39_y: OK regex: '(?!\A)x'm parsed_regex: '(?!\A)x'm str: a
+xb
+ result_expr: - expected_results -
+40_n: OK regex: '^(o)(?!.*\1)'i parsed_regex: '^(o)(?!.*\1)'i str: Oo result_expr: - expected_results -
+41_n: OK regex: .*a(?!(b|cd)*e).*f parsed_regex: .*a(?!(b|cd)*e).*f str: ......abef result_expr: - expected_results -
+42_y: OK regex: ^(a*?)(?!(aa|aaaa)*$) parsed_regex: ^(a*?)(?!(aa|aaaa)*$) str: aaaaaaaaaaaaaaaaaaaa result_expr: $1 expected_results a
+43_y: OK regex: (?!)+?|(.{2,4}) parsed_regex: (?!)+?|(.{2,4}) str: abcde result_expr: $1 expected_results abcd
+44_y: OK regex: ^(a*?)(?!(a{6}|a{5})*$) parsed_regex: ^(a*?)(?!(a{6}|a{5})*$) str: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa result_expr: $+[1] expected_results 12
+45_y: OK regex: a(?!b(?!c(?!d(?!e))))...(.) parsed_regex: a(?!b(?!c(?!d(?!e))))...(.) str: abxabcdxabcde result_expr: $1 expected_results e
+46_y: OK regex: X(?!b+(?!(c+)*(?!(c+)*d))).*X parsed_regex: X(?!b+(?!(c+)*(?!(c+)*d))).*X str: aXbbbbbbbcccccccccccccaaaX result_expr: - expected_results -
+47_y: OK regex: ((?s).)c(?!.) parsed_regex: ((?s).)c(?!.) str: a
+b
+c
+ result_expr: $1 expected_results 
+
+48_y: OK regex: ((?s).)c(?!.) parsed_regex: ((?s).)c(?!.) str: a
+b
+c
+ result_expr: $1:$& expected_results 
+:
+c
+49_y: OK regex: ((?s)b.)c(?!.) parsed_regex: ((?s)b.)c(?!.) str: a
+b
+c
+ result_expr: $1 expected_results b
+
+50_y: OK regex: ((?s)b.)c(?!.) parsed_regex: ((?s)b.)c(?!.) str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+51_y: OK regex: ((?s)b.)c(?!\N) parsed_regex: ((?s)b.)c(?!\N) str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+52_y: OK regex: '(b.)c(?!\N)'s parsed_regex: '(b.)c(?!\N)'s str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+53_n: OK regex: a*(?!) parsed_regex: a*(?!) str: aaaab result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-regex_19_lookahead.cpp.output b/regression-tests/test-results/clang-18-c++20/pure2-regex_19_lookahead.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_01_char_matcher.cpp.execution b/regression-tests/test-results/gcc-10-c++20/pure2-regex_01_char_matcher.cpp.execution
new file mode 100644
index 000000000..af124736e
--- /dev/null
+++ b/regression-tests/test-results/gcc-10-c++20/pure2-regex_01_char_matcher.cpp.execution
@@ -0,0 +1,14 @@
+Running tests_01_char_matcher:
+01_y: OK regex: abc parsed_regex: abc str: abc result_expr: $& expected_results abc
+02_y: OK regex: abc parsed_regex: abc str: abc result_expr: $-[0] expected_results 0
+03_y: OK regex: abc parsed_regex: abc str: abc result_expr: $+[0] expected_results 3
+04_n: OK regex: abc parsed_regex: abc str: xbc result_expr: - expected_results -
+05_n: OK regex: abc parsed_regex: abc str: axc result_expr: - expected_results -
+06_n: OK regex: abc parsed_regex: abc str: abx result_expr: - expected_results -
+07_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $& expected_results abc
+08_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $-[0] expected_results 1
+09_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $+[0] expected_results 4
+10_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $& expected_results abc
+11_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $-[0] expected_results 2
+12_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $+[0] expected_results 5
+
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_01_char_matcher.cpp.output b/regression-tests/test-results/gcc-10-c++20/pure2-regex_01_char_matcher.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_02_ranges.cpp.execution b/regression-tests/test-results/gcc-10-c++20/pure2-regex_02_ranges.cpp.execution
new file mode 100644
index 000000000..dc0b36002
--- /dev/null
+++ b/regression-tests/test-results/gcc-10-c++20/pure2-regex_02_ranges.cpp.execution
@@ -0,0 +1,42 @@
+Running tests_02_ranges:
+01_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $& expected_results abc
+02_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $-[0] expected_results 0
+03_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $+[0] expected_results 3
+04_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $& expected_results abc
+05_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $-[0] expected_results 0
+06_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $+[0] expected_results 3
+07_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $& expected_results abbc
+08_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $-[0] expected_results 0
+09_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $+[0] expected_results 4
+10_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $& expected_results abbbbc
+11_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $-[0] expected_results 0
+12_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $+[0] expected_results 6
+13_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $& expected_results abbbbc
+14_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $-[0] expected_results 0
+15_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $+[0] expected_results 6
+16_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $& expected_results abbc
+17_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $-[0] expected_results 0
+18_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $+[0] expected_results 4
+19_n: OK regex: ab+bc parsed_regex: ab+bc str: abc result_expr: - expected_results -
+20_n: OK regex: ab+bc parsed_regex: ab+bc str: abq result_expr: - expected_results -
+21_n: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abq result_expr: - expected_results -
+22_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $& expected_results abbbbc
+23_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $-[0] expected_results 0
+24_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $+[0] expected_results 6
+25_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $& expected_results abbbbc
+26_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $-[0] expected_results 0
+27_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $+[0] expected_results 6
+28_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $& expected_results abbbbc
+29_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $-[0] expected_results 0
+30_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $+[0] expected_results 6
+31_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $& expected_results abbbbc
+32_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $-[0] expected_results 0
+33_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $+[0] expected_results 6
+34_n: OK regex: ab{4,5}bc parsed_regex: ab{4,5}bc str: abbbbc result_expr: - expected_results -
+35_y: OK regex: ab?bc parsed_regex: ab?bc str: abbc result_expr: $& expected_results abbc
+36_y: OK regex: ab?bc parsed_regex: ab?bc str: abc result_expr: $& expected_results abc
+37_y: OK regex: ab{0,1}bc parsed_regex: ab{0,1}bc str: abc result_expr: $& expected_results abc
+38_n: OK regex: ab?bc parsed_regex: ab?bc str: abbbbc result_expr: - expected_results -
+39_y: OK regex: ab?c parsed_regex: ab?c str: abc result_expr: $& expected_results abc
+40_y: OK regex: ab{0,1}c parsed_regex: ab{0,1}c str: abc result_expr: $& expected_results abc
+
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_02_ranges.cpp.output b/regression-tests/test-results/gcc-10-c++20/pure2-regex_02_ranges.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_03_wildcard.cpp.execution b/regression-tests/test-results/gcc-10-c++20/pure2-regex_03_wildcard.cpp.execution
new file mode 100644
index 000000000..f3f0ea9cc
--- /dev/null
+++ b/regression-tests/test-results/gcc-10-c++20/pure2-regex_03_wildcard.cpp.execution
@@ -0,0 +1,22 @@
+Running tests_03_wildcard:
+01_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $& expected_results a
+02_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $-[0] expected_results 0
+03_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $+[0] expected_results 1
+04_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $& expected_results abbb
+05_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $-[0] expected_results 0
+06_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+07_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $& expected_results a
+08_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $-[0] expected_results 0
+09_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $+[0] expected_results 1
+10_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $& expected_results abbb
+11_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $-[0] expected_results 0
+12_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+13_y: OK Warning: Parsed regex does not match. regex: \N{ 3 , 4 } parsed_regex: \N{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+14_y: OK regex: a.c parsed_regex: a.c str: abc result_expr: $& expected_results abc
+15_y: OK regex: a.c parsed_regex: a.c str: axc result_expr: $& expected_results axc
+16_y: OK regex: a\Nc parsed_regex: a\Nc str: abc result_expr: $& expected_results abc
+17_y: OK regex: a.*c parsed_regex: a.*c str: axyzc result_expr: $& expected_results axyzc
+18_y: OK regex: a\N*c parsed_regex: a\N*c str: axyzc result_expr: $& expected_results axyzc
+19_n: OK regex: a.*c parsed_regex: a.*c str: axyzd result_expr: - expected_results -
+20_n: OK regex: a\N*c parsed_regex: a\N*c str: axyzd result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_03_wildcard.cpp.output b/regression-tests/test-results/gcc-10-c++20/pure2-regex_03_wildcard.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_04_start_end.cpp.execution b/regression-tests/test-results/gcc-10-c++20/pure2-regex_04_start_end.cpp.execution
new file mode 100644
index 000000000..6fef36434
--- /dev/null
+++ b/regression-tests/test-results/gcc-10-c++20/pure2-regex_04_start_end.cpp.execution
@@ -0,0 +1,11 @@
+Running tests_04_start_end:
+01_y: OK regex: ^abc$ parsed_regex: ^abc$ str: abc result_expr: $& expected_results abc
+02_n: OK regex: ^abc$ parsed_regex: ^abc$ str: abcc result_expr: - expected_results -
+03_y: OK regex: ^abc parsed_regex: ^abc str: abcc result_expr: $& expected_results abc
+04_n: OK regex: ^abc$ parsed_regex: ^abc$ str: aabc result_expr: - expected_results -
+05_y: OK regex: abc$ parsed_regex: abc$ str: aabc result_expr: $& expected_results abc
+06_n: OK regex: abc$ parsed_regex: abc$ str: aabcd result_expr: - expected_results -
+07_y: OK regex: ^ parsed_regex: ^ str: abc result_expr: $& expected_results 
+08_y: OK regex: $ parsed_regex: $ str: abc result_expr: $& expected_results 
+09_n: OK regex: $b parsed_regex: $b str: b result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_04_start_end.cpp.output b/regression-tests/test-results/gcc-10-c++20/pure2-regex_04_start_end.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_05_classes.cpp.execution b/regression-tests/test-results/gcc-10-c++20/pure2-regex_05_classes.cpp.execution
new file mode 100644
index 000000000..306bf3395
--- /dev/null
+++ b/regression-tests/test-results/gcc-10-c++20/pure2-regex_05_classes.cpp.execution
@@ -0,0 +1,21 @@
+Running tests_05_classes:
+01_n: OK regex: a[bc]d parsed_regex: a[bc]d str: abc result_expr: - expected_results -
+02_y: OK regex: a[bc]d parsed_regex: a[bc]d str: abd result_expr: $& expected_results abd
+03_y: OK regex: a[b]d parsed_regex: a[b]d str: abd result_expr: $& expected_results abd
+04_y: OK regex: [a][b][d] parsed_regex: [a][b][d] str: abd result_expr: $& expected_results abd
+05_y: OK regex: .[b]. parsed_regex: .[b]. str: abd result_expr: $& expected_results abd
+06_n: OK regex: .[b]. parsed_regex: .[b]. str: aBd result_expr: - expected_results -
+07_n: OK regex: a[b-d]e parsed_regex: a[b-d]e str: abd result_expr: - expected_results -
+08_y: OK regex: a[b-d]e parsed_regex: a[b-d]e str: ace result_expr: $& expected_results ace
+09_y: OK regex: a[b-d] parsed_regex: a[b-d] str: aac result_expr: $& expected_results ac
+10_y: OK regex: a[-b] parsed_regex: a[-b] str: a- result_expr: $& expected_results a-
+11_y: OK regex: a[b-] parsed_regex: a[b-] str: a- result_expr: $& expected_results a-
+12_y: OK regex: a] parsed_regex: a] str: a] result_expr: $& expected_results a]
+13_y: OK regex: a[]]b parsed_regex: a[]]b str: a]b result_expr: $& expected_results a]b
+14_y: OK regex: a[^bc]d parsed_regex: a[^bc]d str: aed result_expr: $& expected_results aed
+15_n: OK regex: a[^bc]d parsed_regex: a[^bc]d str: abd result_expr: - expected_results -
+16_y: OK regex: a[^-b]c parsed_regex: a[^-b]c str: adc result_expr: $& expected_results adc
+17_n: OK regex: a[^-b]c parsed_regex: a[^-b]c str: a-c result_expr: - expected_results -
+18_n: OK regex: a[^]b]c parsed_regex: a[^]b]c str: a]c result_expr: - expected_results -
+19_y: OK regex: a[^]b]c parsed_regex: a[^]b]c str: adc result_expr: $& expected_results adc
+
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_05_classes.cpp.output b/regression-tests/test-results/gcc-10-c++20/pure2-regex_05_classes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_06_boundaries.cpp.execution b/regression-tests/test-results/gcc-10-c++20/pure2-regex_06_boundaries.cpp.execution
new file mode 100644
index 000000000..420a4c587
--- /dev/null
+++ b/regression-tests/test-results/gcc-10-c++20/pure2-regex_06_boundaries.cpp.execution
@@ -0,0 +1,19 @@
+Running tests_06_boundaries:
+01_y: OK regex: \ba\b parsed_regex: \ba\b str: a- result_expr: - expected_results -
+02_y: OK regex: \ba\b parsed_regex: \ba\b str: -a result_expr: - expected_results -
+03_y: OK regex: \ba\b parsed_regex: \ba\b str: -a- result_expr: - expected_results -
+04_n: OK regex: \by\b parsed_regex: \by\b str: xy result_expr: - expected_results -
+05_n: OK regex: \by\b parsed_regex: \by\b str: yz result_expr: - expected_results -
+06_n: OK regex: \by\b parsed_regex: \by\b str: xyz result_expr: - expected_results -
+07_n: OK regex: \Ba\B parsed_regex: \Ba\B str: a- result_expr: - expected_results -
+08_n: OK regex: \Ba\B parsed_regex: \Ba\B str: -a result_expr: - expected_results -
+09_n: OK regex: \Ba\B parsed_regex: \Ba\B str: -a- result_expr: - expected_results -
+10_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: - expected_results -
+11_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: $-[0] expected_results 1
+12_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: $+[0] expected_results 2
+13_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: - expected_results -
+14_y: OK regex: \by\B parsed_regex: \by\B str: yz result_expr: - expected_results -
+15_y: OK regex: \By\B parsed_regex: \By\B str: xyz result_expr: - expected_results -
+16_n: OK regex: \b parsed_regex: \b str:  result_expr: - expected_results -
+17_y: OK regex: \B parsed_regex: \B str:  result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_06_boundaries.cpp.output b/regression-tests/test-results/gcc-10-c++20/pure2-regex_06_boundaries.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_07_short_classes.cpp.execution b/regression-tests/test-results/gcc-10-c++20/pure2-regex_07_short_classes.cpp.execution
new file mode 100644
index 000000000..519c05f92
--- /dev/null
+++ b/regression-tests/test-results/gcc-10-c++20/pure2-regex_07_short_classes.cpp.execution
@@ -0,0 +1,26 @@
+Running tests_07_short_classes:
+01_y: OK regex: \w parsed_regex: \w str: a result_expr: - expected_results -
+02_n: OK regex: \w parsed_regex: \w str: - result_expr: - expected_results -
+03_n: OK regex: \W parsed_regex: \W str: a result_expr: - expected_results -
+04_y: OK regex: \W parsed_regex: \W str: - result_expr: - expected_results -
+05_y: OK regex: a\sb parsed_regex: a\sb str: a b result_expr: - expected_results -
+06_n: OK regex: a\sb parsed_regex: a\sb str: a-b result_expr: - expected_results -
+07_n: OK regex: a\Sb parsed_regex: a\Sb str: a b result_expr: - expected_results -
+08_y: OK regex: a\Sb parsed_regex: a\Sb str: a-b result_expr: - expected_results -
+09_y: OK regex: \d parsed_regex: \d str: 1 result_expr: - expected_results -
+10_n: OK regex: \d parsed_regex: \d str: - result_expr: - expected_results -
+11_n: OK regex: \D parsed_regex: \D str: 1 result_expr: - expected_results -
+12_y: OK regex: \D parsed_regex: \D str: - result_expr: - expected_results -
+13_y: OK regex: [\w] parsed_regex: [\w] str: a result_expr: - expected_results -
+14_n: OK regex: [\w] parsed_regex: [\w] str: - result_expr: - expected_results -
+15_n: OK regex: [\W] parsed_regex: [\W] str: a result_expr: - expected_results -
+16_y: OK regex: [\W] parsed_regex: [\W] str: - result_expr: - expected_results -
+17_y: OK regex: a[\s]b parsed_regex: a[\s]b str: a b result_expr: - expected_results -
+18_n: OK regex: a[\s]b parsed_regex: a[\s]b str: a-b result_expr: - expected_results -
+19_n: OK regex: a[\S]b parsed_regex: a[\S]b str: a b result_expr: - expected_results -
+20_y: OK regex: a[\S]b parsed_regex: a[\S]b str: a-b result_expr: - expected_results -
+21_y: OK regex: [\d] parsed_regex: [\d] str: 1 result_expr: - expected_results -
+22_n: OK regex: [\d] parsed_regex: [\d] str: - result_expr: - expected_results -
+23_n: OK regex: [\D] parsed_regex: [\D] str: 1 result_expr: - expected_results -
+24_y: OK regex: [\D] parsed_regex: [\D] str: - result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_07_short_classes.cpp.output b/regression-tests/test-results/gcc-10-c++20/pure2-regex_07_short_classes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_08_alternatives.cpp.execution b/regression-tests/test-results/gcc-10-c++20/pure2-regex_08_alternatives.cpp.execution
new file mode 100644
index 000000000..c12fd2afe
--- /dev/null
+++ b/regression-tests/test-results/gcc-10-c++20/pure2-regex_08_alternatives.cpp.execution
@@ -0,0 +1,4 @@
+Running tests_08_alternatives:
+01_y: OK regex: ab|cd parsed_regex: ab|cd str: abc result_expr: $& expected_results ab
+02_y: OK regex: ab|cd parsed_regex: ab|cd str: abcd result_expr: $& expected_results ab
+
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_08_alternatives.cpp.output b/regression-tests/test-results/gcc-10-c++20/pure2-regex_08_alternatives.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_09_groups.cpp.execution b/regression-tests/test-results/gcc-10-c++20/pure2-regex_09_groups.cpp.execution
new file mode 100644
index 000000000..05df860f9
--- /dev/null
+++ b/regression-tests/test-results/gcc-10-c++20/pure2-regex_09_groups.cpp.execution
@@ -0,0 +1,13 @@
+Running tests_09_groups:
+01_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $&-$1 expected_results ef-
+02_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $-[0] expected_results 1
+03_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $+[0] expected_results 3
+04_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $-[1] expected_results 1
+05_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $+[1] expected_results 1
+06_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $&-$1-$2 expected_results a-a-a
+07_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $-[0]-$-[1]-$-[2] expected_results 0-0-0
+08_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $+[0]-$+[1]-$+[2] expected_results 1-1-1
+09_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $&-$1-$2 expected_results abc-a-c
+10_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $-[0]-$-[1]-$-[2] expected_results 0-0-2
+11_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $+[0]-$+[1]-$+[2] expected_results 3-1-3
+
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_09_groups.cpp.output b/regression-tests/test-results/gcc-10-c++20/pure2-regex_09_groups.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_10_escapes.cpp.execution b/regression-tests/test-results/gcc-10-c++20/pure2-regex_10_escapes.cpp.execution
new file mode 100644
index 000000000..fe6e6efc9
--- /dev/null
+++ b/regression-tests/test-results/gcc-10-c++20/pure2-regex_10_escapes.cpp.execution
@@ -0,0 +1,39 @@
+Running tests_10_escapes:
+01_y: OK regex: a\(b parsed_regex: a\(b str: a(b result_expr: $&-$1 expected_results a(b-
+02_y: OK regex: a\(*b parsed_regex: a\(*b str: ab result_expr: $& expected_results ab
+03_y: OK regex: a\(*b parsed_regex: a\(*b str: a((b result_expr: $& expected_results a((b
+04_y: OK regex: a\\b parsed_regex: a\\b str: a\b result_expr: $& expected_results a\b
+05_y: OK regex: foo(\h+)bar parsed_regex: foo(\h+)bar str: foo	bar result_expr: $1 expected_results 	
+06_y: OK regex: (\H+)(\h) parsed_regex: (\H+)(\h) str: foo	bar result_expr: $1-$2 expected_results foo-	
+07_y: OK regex: (\h+)(\H) parsed_regex: (\h+)(\H) str: foo	bar result_expr: $1-$2 expected_results 	-b
+08_y: OK regex: foo(\h)bar parsed_regex: foo(\h)bar str: foo	bar result_expr: $1 expected_results 	
+09_y: OK regex: (\H)(\h) parsed_regex: (\H)(\h) str: foo	bar result_expr: $1-$2 expected_results o-	
+10_y: OK regex: (\h)(\H) parsed_regex: (\h)(\H) str: foo	bar result_expr: $1-$2 expected_results 	-b
+11_y: OK regex: foo(\v+)bar parsed_regex: foo(\v+)bar str: foo
+
+
+bar result_expr: $1 expected_results 
+
+
+
+12_y: OK regex: (\V+)(\v) parsed_regex: (\V+)(\v) str: foo
+
+
+bar result_expr: $1-$2 expected_results foo-
+13_y: OK regex: (\v+)(\V) parsed_regex: (\v+)(\V) str: foo
+
+
+bar result_expr: $1-$2 expected_results 
+
+
+-b
+14_y: OK regex: foo(\v)bar parsed_regex: foo(\v)bar str: foo
bar result_expr: $1 expected_results 
+15_y: OK regex: (\V)(\v) parsed_regex: (\V)(\v) str: foo
bar result_expr: $1-$2 expected_results o-
+16_y: OK regex: (\v)(\V) parsed_regex: (\v)(\V) str: foo
bar result_expr: $1-$2 expected_results 
-b
+17_y: OK regex: foo\t\n\r\f\a\ebar parsed_regex: foo\t\n\r\f\a\ebar str: foo	
+
bar result_expr: $& expected_results foo	
+
bar
+18_y: OK regex: foo\Kbar parsed_regex: foo\Kbar str: foobar result_expr: $& expected_results bar
+19_y: OK regex: \x41\x42 parsed_regex: \x41\x42 str: AB result_expr: $& expected_results AB
+20_y: OK regex: \101\o{102} parsed_regex: \101\o{102} str: AB result_expr: $& expected_results AB
+
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_10_escapes.cpp.output b/regression-tests/test-results/gcc-10-c++20/pure2-regex_10_escapes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_11_group_references.cpp.execution b/regression-tests/test-results/gcc-10-c++20/pure2-regex_11_group_references.cpp.execution
new file mode 100644
index 000000000..724d0085a
--- /dev/null
+++ b/regression-tests/test-results/gcc-10-c++20/pure2-regex_11_group_references.cpp.execution
@@ -0,0 +1,26 @@
+Running tests_11_group_references:
+01_y: OK regex: (foo)(\g-2) parsed_regex: (foo)(\g-2) str: foofoo result_expr: $1-$2 expected_results foo-foo
+02_y: OK regex: (foo)(\g-2)(foo)(\g-2) parsed_regex: (foo)(\g-2)(foo)(\g-2) str: foofoofoofoo result_expr: $1-$2-$3-$4 expected_results foo-foo-foo-foo
+03_y: OK regex: (([abc]+) \g-1)(([abc]+) \g{-1}) parsed_regex: (([abc]+) \g-1)(([abc]+) \g{-1}) str: abc abccba cba result_expr: $2-$4 expected_results abc-cba
+04_y: OK regex: (a)(b)(c)\g1\g2\g3 parsed_regex: (a)(b)(c)\g1\g2\g3 str: abcabc result_expr: $1$2$3 expected_results abc
+05_y: OK regex: /(?'n'foo) \g{n}/ parsed_regex: /(?'n'foo) \g{n}/ str: ..foo foo.. result_expr: $1 expected_results foo
+06_y: OK regex: /(?'n'foo) \g{ n }/ parsed_regex: /(?'n'foo) \g{ n }/ str: ..foo foo.. result_expr: $1 expected_results foo
+07_yM: OK regex: /(?'n'foo) \g{n}/ parsed_regex: /(?'n'foo) \g{n}/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+08_y: OK regex: /(?<n>foo) \g{n}/ parsed_regex: /(?<n>foo) \g{n}/ str: ..foo foo.. result_expr: $1 expected_results foo
+09_yM: OK regex: /(?<n>foo) \g{n}/ parsed_regex: /(?<n>foo) \g{n}/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+10_y: OK regex: /(?<as>as) (\w+) \g{as} (\w+)/ parsed_regex: /(?<as>as) (\w+) \g{as} (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+11_y: OK regex: /(?'n'foo) \k<n>/ parsed_regex: /(?'n'foo) \k<n>/ str: ..foo foo.. result_expr: $1 expected_results foo
+12_yM: OK regex: /(?'n'foo) \k<n>/ parsed_regex: /(?'n'foo) \k<n>/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+13_y: OK regex: /(?<n>foo) \k'n'/ parsed_regex: /(?<n>foo) \k'n'/ str: ..foo foo.. result_expr: $1 expected_results foo
+14_yM: OK regex: /(?<n>foo) \k'n'/ parsed_regex: /(?<n>foo) \k'n'/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+15_yM: OK regex: /(?'a1'foo) \k'a1'/ parsed_regex: /(?'a1'foo) \k'a1'/ str: ..foo foo.. result_expr: $+{a1} expected_results foo
+16_yM: OK regex: /(?<a1>foo) \k<a1>/ parsed_regex: /(?<a1>foo) \k<a1>/ str: ..foo foo.. result_expr: $+{a1} expected_results foo
+17_yM: OK regex: /(?'_'foo) \k'_'/ parsed_regex: /(?'_'foo) \k'_'/ str: ..foo foo.. result_expr: $+{_} expected_results foo
+18_yM: OK regex: /(?<_>foo) \k<_>/ parsed_regex: /(?<_>foo) \k<_>/ str: ..foo foo.. result_expr: $+{_} expected_results foo
+19_yM: OK regex: /(?'_0_'foo) \k'_0_'/ parsed_regex: /(?'_0_'foo) \k'_0_'/ str: ..foo foo.. result_expr: $+{_0_} expected_results foo
+20_yM: OK regex: /(?<_0_>foo) \k<_0_>/ parsed_regex: /(?<_0_>foo) \k<_0_>/ str: ..foo foo.. result_expr: $+{_0_} expected_results foo
+21_y: OK regex: /(?<as>as) (\w+) \k<as> (\w+)/ parsed_regex: /(?<as>as) (\w+) \k<as> (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+22_y: OK regex: /(?<as>as) (\w+) \k{as} (\w+)/ parsed_regex: /(?<as>as) (\w+) \k{as} (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+23_y: OK regex: /(?<as>as) (\w+) \k'as' (\w+)/ parsed_regex: /(?<as>as) (\w+) \k'as' (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+24_y: OK regex: /(?<as>as) (\w+) \k{ as } (\w+)/ parsed_regex: /(?<as>as) (\w+) \k{ as } (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_11_group_references.cpp.output b/regression-tests/test-results/gcc-10-c++20/pure2-regex_11_group_references.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_12_case_insensitive.cpp.execution b/regression-tests/test-results/gcc-10-c++20/pure2-regex_12_case_insensitive.cpp.execution
new file mode 100644
index 000000000..4939deb24
--- /dev/null
+++ b/regression-tests/test-results/gcc-10-c++20/pure2-regex_12_case_insensitive.cpp.execution
@@ -0,0 +1,121 @@
+Running tests_12_case_insensitive:
+01_y: OK regex: 'abc'i parsed_regex: 'abc'i str: ABC result_expr: $& expected_results ABC
+02_n: OK regex: 'abc'i parsed_regex: 'abc'i str: XBC result_expr: - expected_results -
+03_n: OK regex: 'abc'i parsed_regex: 'abc'i str: AXC result_expr: - expected_results -
+04_n: OK regex: 'abc'i parsed_regex: 'abc'i str: ABX result_expr: - expected_results -
+05_y: OK regex: 'abc'i parsed_regex: 'abc'i str: XABCY result_expr: $& expected_results ABC
+06_y: OK regex: 'abc'i parsed_regex: 'abc'i str: ABABC result_expr: $& expected_results ABC
+07_y: OK regex: 'ab*c'i parsed_regex: 'ab*c'i str: ABC result_expr: $& expected_results ABC
+08_y: OK regex: 'ab*bc'i parsed_regex: 'ab*bc'i str: ABC result_expr: $& expected_results ABC
+09_y: OK regex: 'ab*bc'i parsed_regex: 'ab*bc'i str: ABBC result_expr: $& expected_results ABBC
+10_y: OK regex: 'ab*?bc'i parsed_regex: 'ab*?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+11_y: OK regex: 'ab{0,}?bc'i parsed_regex: 'ab{0,}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+12_y: OK regex: 'ab+?bc'i parsed_regex: 'ab+?bc'i str: ABBC result_expr: $& expected_results ABBC
+13_n: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABC result_expr: - expected_results -
+14_n: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABQ result_expr: - expected_results -
+15_n: OK regex: 'ab{1,}bc'i parsed_regex: 'ab{1,}bc'i str: ABQ result_expr: - expected_results -
+16_y: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+17_y: OK regex: 'ab{1,}?bc'i parsed_regex: 'ab{1,}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+18_y: OK regex: 'ab{1,3}?bc'i parsed_regex: 'ab{1,3}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+19_y: OK regex: 'ab{3,4}?bc'i parsed_regex: 'ab{3,4}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+20_n: OK regex: 'ab{4,5}?bc'i parsed_regex: 'ab{4,5}?bc'i str: ABBBBC result_expr: - expected_results -
+21_y: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABBC result_expr: $& expected_results ABBC
+22_y: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABC result_expr: $& expected_results ABC
+23_y: OK regex: 'ab{0,1}?bc'i parsed_regex: 'ab{0,1}?bc'i str: ABC result_expr: $& expected_results ABC
+24_n: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABBBBC result_expr: - expected_results -
+25_y: OK regex: 'ab??c'i parsed_regex: 'ab??c'i str: ABC result_expr: $& expected_results ABC
+26_y: OK regex: 'ab{0,1}?c'i parsed_regex: 'ab{0,1}?c'i str: ABC result_expr: $& expected_results ABC
+27_y: OK regex: '^abc$'i parsed_regex: '^abc$'i str: ABC result_expr: $& expected_results ABC
+28_n: OK regex: '^abc$'i parsed_regex: '^abc$'i str: ABCC result_expr: - expected_results -
+29_y: OK regex: '^abc'i parsed_regex: '^abc'i str: ABCC result_expr: $& expected_results ABC
+30_n: OK regex: '^abc$'i parsed_regex: '^abc$'i str: AABC result_expr: - expected_results -
+31_y: OK regex: 'abc$'i parsed_regex: 'abc$'i str: AABC result_expr: $& expected_results ABC
+32_y: OK regex: '^'i parsed_regex: '^'i str: ABC result_expr: $& expected_results 
+33_y: OK regex: '$'i parsed_regex: '$'i str: ABC result_expr: $& expected_results 
+34_y: OK regex: 'a.c'i parsed_regex: 'a.c'i str: ABC result_expr: $& expected_results ABC
+35_y: OK regex: 'a.c'i parsed_regex: 'a.c'i str: AXC result_expr: $& expected_results AXC
+36_y: OK regex: 'a\Nc'i parsed_regex: 'a\Nc'i str: ABC result_expr: $& expected_results ABC
+37_y: OK regex: 'a.*?c'i parsed_regex: 'a.*?c'i str: AXYZC result_expr: $& expected_results AXYZC
+38_n: OK regex: 'a.*c'i parsed_regex: 'a.*c'i str: AXYZD result_expr: - expected_results -
+39_n: OK regex: 'a[bc]d'i parsed_regex: 'a[bc]d'i str: ABC result_expr: - expected_results -
+40_y: OK regex: 'a[bc]d'i parsed_regex: 'a[bc]d'i str: ABD result_expr: $& expected_results ABD
+41_n: OK regex: 'a[b-d]e'i parsed_regex: 'a[b-d]e'i str: ABD result_expr: - expected_results -
+42_y: OK regex: 'a[b-d]e'i parsed_regex: 'a[b-d]e'i str: ACE result_expr: $& expected_results ACE
+43_y: OK regex: 'a[b-d]'i parsed_regex: 'a[b-d]'i str: AAC result_expr: $& expected_results AC
+44_y: OK regex: 'a[-b]'i parsed_regex: 'a[-b]'i str: A- result_expr: $& expected_results A-
+45_y: OK regex: 'a[b-]'i parsed_regex: 'a[b-]'i str: A- result_expr: $& expected_results A-
+46_y: OK regex: 'a]'i parsed_regex: 'a]'i str: A] result_expr: $& expected_results A]
+47_y: OK regex: 'a[]]b'i parsed_regex: 'a[]]b'i str: A]B result_expr: $& expected_results A]B
+48_y: OK regex: 'a[^bc]d'i parsed_regex: 'a[^bc]d'i str: AED result_expr: $& expected_results AED
+49_n: OK regex: 'a[^bc]d'i parsed_regex: 'a[^bc]d'i str: ABD result_expr: - expected_results -
+50_y: OK regex: 'a[^-b]c'i parsed_regex: 'a[^-b]c'i str: ADC result_expr: $& expected_results ADC
+51_n: OK regex: 'a[^-b]c'i parsed_regex: 'a[^-b]c'i str: A-C result_expr: - expected_results -
+52_n: OK regex: 'a[^]b]c'i parsed_regex: 'a[^]b]c'i str: A]C result_expr: - expected_results -
+53_y: OK regex: 'a[^]b]c'i parsed_regex: 'a[^]b]c'i str: ADC result_expr: $& expected_results ADC
+54_y: OK regex: 'ab|cd'i parsed_regex: 'ab|cd'i str: ABC result_expr: $& expected_results AB
+55_y: OK regex: 'ab|cd'i parsed_regex: 'ab|cd'i str: ABCD result_expr: $& expected_results AB
+56_y: OK regex: '()ef'i parsed_regex: '()ef'i str: DEF result_expr: $&-$1 expected_results EF-
+57_n: OK regex: '$b'i parsed_regex: '$b'i str: B result_expr: - expected_results -
+58_y: OK regex: 'a\(b'i parsed_regex: 'a\(b'i str: A(B result_expr: $&-$1 expected_results A(B-
+59_y: OK regex: 'a\(*b'i parsed_regex: 'a\(*b'i str: AB result_expr: $& expected_results AB
+60_y: OK regex: 'a\(*b'i parsed_regex: 'a\(*b'i str: A((B result_expr: $& expected_results A((B
+61_y: OK regex: 'a\\b'i parsed_regex: 'a\\b'i str: A\B result_expr: $& expected_results A\B
+62_y: OK regex: '((a))'i parsed_regex: '((a))'i str: ABC result_expr: $&-$1-$2 expected_results A-A-A
+63_y: OK regex: '(a)b(c)'i parsed_regex: '(a)b(c)'i str: ABC result_expr: $&-$1-$2 expected_results ABC-A-C
+64_y: OK regex: 'a+b+c'i parsed_regex: 'a+b+c'i str: AABBABC result_expr: $& expected_results ABC
+65_y: OK regex: 'a{1,}b{1,}c'i parsed_regex: 'a{1,}b{1,}c'i str: AABBABC result_expr: $& expected_results ABC
+66_y: OK regex: 'a.+?c'i parsed_regex: 'a.+?c'i str: ABCABC result_expr: $& expected_results ABC
+67_y: OK regex: 'a.*?c'i parsed_regex: 'a.*?c'i str: ABCABC result_expr: $& expected_results ABC
+68_y: OK regex: 'a.{0,5}?c'i parsed_regex: 'a.{0,5}?c'i str: ABCABC result_expr: $& expected_results ABC
+69_y: OK regex: '(a+|b)*'i parsed_regex: '(a+|b)*'i str: AB result_expr: $&-$1 expected_results AB-B
+70_y: OK regex: '(a+|b){0,}'i parsed_regex: '(a+|b){0,}'i str: AB result_expr: $&-$1 expected_results AB-B
+71_y: OK regex: '(a+|b)+'i parsed_regex: '(a+|b)+'i str: AB result_expr: $&-$1 expected_results AB-B
+72_y: OK regex: '(a+|b){1,}'i parsed_regex: '(a+|b){1,}'i str: AB result_expr: $&-$1 expected_results AB-B
+73_y: OK regex: '(a+|b)?'i parsed_regex: '(a+|b)?'i str: AB result_expr: $&-$1 expected_results A-A
+74_y: OK regex: '(a+|b){0,1}'i parsed_regex: '(a+|b){0,1}'i str: AB result_expr: $&-$1 expected_results A-A
+75_y: OK regex: '(a+|b){0,1}?'i parsed_regex: '(a+|b){0,1}?'i str: AB result_expr: $&-$1 expected_results -
+76_y: OK regex: '[^ab]*'i parsed_regex: '[^ab]*'i str: CDE result_expr: $& expected_results CDE
+77_n: OK regex: 'abc'i parsed_regex: 'abc'i str:  result_expr: - expected_results -
+78_y: OK regex: 'a*'i parsed_regex: 'a*'i str:  result_expr: $& expected_results 
+79_y: OK regex: '([abc])*d'i parsed_regex: '([abc])*d'i str: ABBBCD result_expr: $&-$1 expected_results ABBBCD-C
+80_y: OK regex: '([abc])*bcd'i parsed_regex: '([abc])*bcd'i str: ABCD result_expr: $&-$1 expected_results ABCD-A
+81_y: OK regex: 'a|b|c|d|e'i parsed_regex: 'a|b|c|d|e'i str: E result_expr: $& expected_results E
+82_y: OK regex: '(a|b|c|d|e)f'i parsed_regex: '(a|b|c|d|e)f'i str: EF result_expr: $&-$1 expected_results EF-E
+83_y: OK regex: 'abcd*efg'i parsed_regex: 'abcd*efg'i str: ABCDEFG result_expr: $& expected_results ABCDEFG
+84_y: OK regex: 'ab*'i parsed_regex: 'ab*'i str: XABYABBBZ result_expr: $& expected_results AB
+85_y: OK regex: 'ab*'i parsed_regex: 'ab*'i str: XAYABBBZ result_expr: $& expected_results A
+86_y: OK regex: '(ab|cd)e'i parsed_regex: '(ab|cd)e'i str: ABCDE result_expr: $&-$1 expected_results CDE-CD
+87_y: OK regex: '[abhgefdc]ij'i parsed_regex: '[abhgefdc]ij'i str: HIJ result_expr: $& expected_results HIJ
+88_n: OK regex: '^(ab|cd)e'i parsed_regex: '^(ab|cd)e'i str: ABCDE result_expr: x$1y expected_results XY
+89_y: OK regex: '(abc|)ef'i parsed_regex: '(abc|)ef'i str: ABCDEF result_expr: $&-$1 expected_results EF-
+90_y: OK regex: '(a|b)c*d'i parsed_regex: '(a|b)c*d'i str: ABCD result_expr: $&-$1 expected_results BCD-B
+91_y: OK regex: '(ab|ab*)bc'i parsed_regex: '(ab|ab*)bc'i str: ABC result_expr: $&-$1 expected_results ABC-A
+92_y: OK regex: 'a([bc]*)c*'i parsed_regex: 'a([bc]*)c*'i str: ABC result_expr: $&-$1 expected_results ABC-BC
+93_y: OK regex: 'a([bc]*)(c*d)'i parsed_regex: 'a([bc]*)(c*d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-BC-D
+94_y: OK regex: 'a([bc]+)(c*d)'i parsed_regex: 'a([bc]+)(c*d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-BC-D
+95_y: OK regex: 'a([bc]*)(c+d)'i parsed_regex: 'a([bc]*)(c+d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-B-CD
+96_y: OK regex: 'a[bcd]*dcdcde'i parsed_regex: 'a[bcd]*dcdcde'i str: ADCDCDE result_expr: $& expected_results ADCDCDE
+97_n: OK regex: 'a[bcd]+dcdcde'i parsed_regex: 'a[bcd]+dcdcde'i str: ADCDCDE result_expr: - expected_results -
+98_y: OK regex: '(ab|a)b*c'i parsed_regex: '(ab|a)b*c'i str: ABC result_expr: $&-$1 expected_results ABC-AB
+99_y: OK regex: '((a)(b)c)(d)'i parsed_regex: '((a)(b)c)(d)'i str: ABCD result_expr: $1-$2-$3-$4 expected_results ABC-A-B-D
+100_y: OK regex: '[a-zA-Z_][a-zA-Z0-9_]*'i parsed_regex: '[a-zA-Z_][a-zA-Z0-9_]*'i str: ALPHA result_expr: $& expected_results ALPHA
+101_y: OK regex: '^a(bc+|b[eh])g|.h$'i parsed_regex: '^a(bc+|b[eh])g|.h$'i str: ABH result_expr: $&-$1 expected_results BH-
+102_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: EFFGZ result_expr: $&-$1-$2 expected_results EFFGZ-EFFGZ-
+103_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: IJ result_expr: $&-$1-$2 expected_results IJ-IJ-J
+104_n: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: EFFG result_expr: - expected_results -
+105_n: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: BCDD result_expr: - expected_results -
+106_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: REFFGZ result_expr: $&-$1-$2 expected_results EFFGZ-EFFGZ-
+107_y: OK regex: '((((((((((a))))))))))'i parsed_regex: '((((((((((a))))))))))'i str: A result_expr: $10 expected_results A
+108_y: OK regex: '((((((((((a))))))))))\10'i parsed_regex: '((((((((((a))))))))))\10'i str: AA result_expr: $& expected_results AA
+109_y: OK regex: '(((((((((a)))))))))'i parsed_regex: '(((((((((a)))))))))'i str: A result_expr: $& expected_results A
+110_n: OK regex: 'multiple words of text'i parsed_regex: 'multiple words of text'i str: UH-UH result_expr: - expected_results -
+111_y: OK regex: 'multiple words'i parsed_regex: 'multiple words'i str: MULTIPLE WORDS, YEAH result_expr: $& expected_results MULTIPLE WORDS
+112_y: OK regex: '(.*)c(.*)'i parsed_regex: '(.*)c(.*)'i str: ABCDE result_expr: $&-$1-$2 expected_results ABCDE-AB-DE
+113_y: OK regex: '\((.*), (.*)\)'i parsed_regex: '\((.*), (.*)\)'i str: (A, B) result_expr: ($2, $1) expected_results (B, A)
+114_n: OK regex: '[k]'i parsed_regex: '[k]'i str: AB result_expr: - expected_results -
+115_y: OK regex: 'abcd'i parsed_regex: 'abcd'i str: ABCD result_expr: $& expected_results ABCD
+116_y: OK regex: 'a(bc)d'i parsed_regex: 'a(bc)d'i str: ABCD result_expr: $1 expected_results BC
+117_y: OK regex: 'a[-]?c'i parsed_regex: 'a[-]?c'i str: AC result_expr: $& expected_results AC
+118_y: OK regex: '(abc)\1'i parsed_regex: '(abc)\1'i str: ABCABC result_expr: $1 expected_results ABC
+119_y: OK regex: '([a-c]*)\1'i parsed_regex: '([a-c]*)\1'i str: ABCABC result_expr: $1 expected_results ABC
+
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_12_case_insensitive.cpp.output b/regression-tests/test-results/gcc-10-c++20/pure2-regex_12_case_insensitive.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_13_posessive_modifier.cpp.execution b/regression-tests/test-results/gcc-10-c++20/pure2-regex_13_posessive_modifier.cpp.execution
new file mode 100644
index 000000000..916d1a084
--- /dev/null
+++ b/regression-tests/test-results/gcc-10-c++20/pure2-regex_13_posessive_modifier.cpp.execution
@@ -0,0 +1,50 @@
+Running tests_13_posessive_modifier:
+01_n: OK regex: a++a parsed_regex: a++a str: aaaaa result_expr: - expected_results -
+02_n: OK regex: a*+a parsed_regex: a*+a str: aaaaa result_expr: - expected_results -
+03_n: OK regex: a{1,5}+a parsed_regex: a{1,5}+a str: aaaaa result_expr: - expected_results -
+04_n: OK regex: a?+a parsed_regex: a?+a str: ab result_expr: - expected_results -
+05_y: OK regex: a++b parsed_regex: a++b str: aaaaab result_expr: $& expected_results aaaaab
+06_y: OK regex: a*+b parsed_regex: a*+b str: aaaaab result_expr: $& expected_results aaaaab
+07_y: OK regex: a{1,5}+b parsed_regex: a{1,5}+b str: aaaaab result_expr: $& expected_results aaaaab
+08_y: OK regex: a?+b parsed_regex: a?+b str: ab result_expr: $& expected_results ab
+09_n: OK regex: fooa++a parsed_regex: fooa++a str: fooaaaaa result_expr: - expected_results -
+10_n: OK regex: fooa*+a parsed_regex: fooa*+a str: fooaaaaa result_expr: - expected_results -
+11_n: OK regex: fooa{1,5}+a parsed_regex: fooa{1,5}+a str: fooaaaaa result_expr: - expected_results -
+12_n: OK regex: fooa?+a parsed_regex: fooa?+a str: fooab result_expr: - expected_results -
+13_y: OK regex: fooa++b parsed_regex: fooa++b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+14_y: OK regex: fooa*+b parsed_regex: fooa*+b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+15_y: OK regex: fooa{1,5}+b parsed_regex: fooa{1,5}+b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+16_y: OK regex: fooa?+b parsed_regex: fooa?+b str: fooab result_expr: $& expected_results fooab
+17_n: OK regex: (aA)++(aA) parsed_regex: (aA)++(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+18_n: OK regex: (aA|bB)++(aA|bB) parsed_regex: (aA|bB)++(aA|bB) str: aAaAbBaAbB result_expr: - expected_results aAaAbBaAbB
+19_n: OK regex: (aA)*+(aA) parsed_regex: (aA)*+(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+20_n: OK regex: (aA|bB)*+(aA|bB) parsed_regex: (aA|bB)*+(aA|bB) str: aAaAbBaAaA result_expr: - expected_results aAaAbBaAaA
+21_n: OK regex: (aA){1,5}+(aA) parsed_regex: (aA){1,5}+(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+22_n: OK regex: (aA|bB){1,5}+(aA|bB) parsed_regex: (aA|bB){1,5}+(aA|bB) str: aAaAbBaAaA result_expr: - expected_results aAaAbBaAaA
+23_n: OK regex: (aA)?+(aA) parsed_regex: (aA)?+(aA) str: aAb result_expr: - expected_results aAb
+24_n: OK regex: (aA|bB)?+(aA|bB) parsed_regex: (aA|bB)?+(aA|bB) str: bBb result_expr: - expected_results bBb
+25_y: OK regex: (aA)++b parsed_regex: (aA)++b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+26_y: OK regex: (aA|bB)++b parsed_regex: (aA|bB)++b str: aAbBaAaAbBb result_expr: $& expected_results aAbBaAaAbBb
+27_y: OK regex: (aA)*+b parsed_regex: (aA)*+b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+28_y: OK regex: (aA|bB)*+b parsed_regex: (aA|bB)*+b str: bBbBbBbBbBb result_expr: $& expected_results bBbBbBbBbBb
+29_y: OK regex: (aA){1,5}+b parsed_regex: (aA){1,5}+b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+30_y: OK regex: (aA|bB){1,5}+b parsed_regex: (aA|bB){1,5}+b str: bBaAbBaAbBb result_expr: $& expected_results bBaAbBaAbBb
+31_y: OK regex: (aA)?+b parsed_regex: (aA)?+b str: aAb result_expr: $& expected_results aAb
+32_y: OK regex: (aA|bB)?+b parsed_regex: (aA|bB)?+b str: bBb result_expr: $& expected_results bBb
+33_n: OK regex: foo(aA)++(aA) parsed_regex: foo(aA)++(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+34_n: OK regex: foo(aA|bB)++(aA|bB) parsed_regex: foo(aA|bB)++(aA|bB) str: foobBbBbBaAaA result_expr: - expected_results foobBbBbBaAaA
+35_n: OK regex: foo(aA)*+(aA) parsed_regex: foo(aA)*+(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+36_n: OK regex: foo(aA|bB)*+(aA|bB) parsed_regex: foo(aA|bB)*+(aA|bB) str: foobBaAbBaAaA result_expr: - expected_results foobBaAbBaAaA
+37_n: OK regex: foo(aA){1,5}+(aA) parsed_regex: foo(aA){1,5}+(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+38_n: OK regex: foo(aA|bB){1,5}+(aA|bB) parsed_regex: foo(aA|bB){1,5}+(aA|bB) str: fooaAbBbBaAaA result_expr: - expected_results fooaAbBbBaAaA
+39_n: OK regex: foo(aA)?+(aA) parsed_regex: foo(aA)?+(aA) str: fooaAb result_expr: - expected_results fooaAb
+40_n: OK regex: foo(aA|bB)?+(aA|bB) parsed_regex: foo(aA|bB)?+(aA|bB) str: foobBb result_expr: - expected_results foobBb
+41_y: OK regex: foo(aA)++b parsed_regex: foo(aA)++b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+42_y: OK regex: foo(aA|bB)++b parsed_regex: foo(aA|bB)++b str: foobBaAbBaAbBb result_expr: $& expected_results foobBaAbBaAbBb
+43_y: OK regex: foo(aA)*+b parsed_regex: foo(aA)*+b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+44_y: OK regex: foo(aA|bB)*+b parsed_regex: foo(aA|bB)*+b str: foobBbBaAaAaAb result_expr: $& expected_results foobBbBaAaAaAb
+45_y: OK regex: foo(aA){1,5}+b parsed_regex: foo(aA){1,5}+b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+46_y: OK regex: foo(aA|bB){1,5}+b parsed_regex: foo(aA|bB){1,5}+b str: foobBaAaAaAaAb result_expr: $& expected_results foobBaAaAaAaAb
+47_y: OK regex: foo(aA)?+b parsed_regex: foo(aA)?+b str: fooaAb result_expr: $& expected_results fooaAb
+48_y: OK regex: foo(aA|bB)?+b parsed_regex: foo(aA|bB)?+b str: foobBb result_expr: $& expected_results foobBb
+
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_13_posessive_modifier.cpp.output b/regression-tests/test-results/gcc-10-c++20/pure2-regex_13_posessive_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_14_multiline_modifier.cpp.execution b/regression-tests/test-results/gcc-10-c++20/pure2-regex_14_multiline_modifier.cpp.execution
new file mode 100644
index 000000000..9a12081ac
--- /dev/null
+++ b/regression-tests/test-results/gcc-10-c++20/pure2-regex_14_multiline_modifier.cpp.execution
@@ -0,0 +1,533 @@
+Running tests_14_multiline_modifier:
+01_y: OK regex: \Z parsed_regex: \Z str: a
+b
+ result_expr: $-[0] expected_results 3
+02_y: OK regex: \z parsed_regex: \z str: a
+b
+ result_expr: $-[0] expected_results 4
+03_y: OK regex: $ parsed_regex: $ str: a
+b
+ result_expr: $-[0] expected_results 3
+04_y: OK regex: \Z parsed_regex: \Z str: b
+a
+ result_expr: $-[0] expected_results 3
+05_y: OK regex: \z parsed_regex: \z str: b
+a
+ result_expr: $-[0] expected_results 4
+06_y: OK regex: $ parsed_regex: $ str: b
+a
+ result_expr: $-[0] expected_results 3
+07_y: OK regex: \Z parsed_regex: \Z str: b
+a result_expr: $-[0] expected_results 3
+08_y: OK regex: \z parsed_regex: \z str: b
+a result_expr: $-[0] expected_results 3
+09_y: OK regex: $ parsed_regex: $ str: b
+a result_expr: $-[0] expected_results 3
+10_y: OK regex: '\Z'm parsed_regex: '\Z'm str: a
+b
+ result_expr: $-[0] expected_results 3
+11_y: OK regex: '\z'm parsed_regex: '\z'm str: a
+b
+ result_expr: $-[0] expected_results 4
+12_y: OK regex: '$'m parsed_regex: '$'m str: a
+b
+ result_expr: $-[0] expected_results 1
+13_y: OK regex: '\Z'm parsed_regex: '\Z'm str: b
+a
+ result_expr: $-[0] expected_results 3
+14_y: OK regex: '\z'm parsed_regex: '\z'm str: b
+a
+ result_expr: $-[0] expected_results 4
+15_y: OK regex: '$'m parsed_regex: '$'m str: b
+a
+ result_expr: $-[0] expected_results 1
+16_y: OK regex: '\Z'm parsed_regex: '\Z'm str: b
+a result_expr: $-[0] expected_results 3
+17_y: OK regex: '\z'm parsed_regex: '\z'm str: b
+a result_expr: $-[0] expected_results 3
+18_y: OK regex: '$'m parsed_regex: '$'m str: b
+a result_expr: $-[0] expected_results 1
+19_n: OK regex: a\Z parsed_regex: a\Z str: a
+b
+ result_expr: - expected_results -
+20_n: OK regex: a\z parsed_regex: a\z str: a
+b
+ result_expr: - expected_results -
+21_n: OK regex: a$ parsed_regex: a$ str: a
+b
+ result_expr: - expected_results -
+22_y: OK regex: a\Z parsed_regex: a\Z str: b
+a
+ result_expr: $-[0] expected_results 2
+23_n: OK regex: a\z parsed_regex: a\z str: b
+a
+ result_expr: - expected_results -
+24_y: OK regex: a$ parsed_regex: a$ str: b
+a
+ result_expr: $-[0] expected_results 2
+25_y: OK regex: a\Z parsed_regex: a\Z str: b
+a result_expr: $-[0] expected_results 2
+26_y: OK regex: a\z parsed_regex: a\z str: b
+a result_expr: $-[0] expected_results 2
+27_y: OK regex: a$ parsed_regex: a$ str: b
+a result_expr: $-[0] expected_results 2
+28_n: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: a
+b
+ result_expr: - expected_results -
+29_n: OK regex: 'a\z'm parsed_regex: 'a\z'm str: a
+b
+ result_expr: - expected_results -
+30_y: OK regex: 'a$'m parsed_regex: 'a$'m str: a
+b
+ result_expr: $-[0] expected_results 0
+31_y: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: b
+a
+ result_expr: $-[0] expected_results 2
+32_n: OK regex: 'a\z'm parsed_regex: 'a\z'm str: b
+a
+ result_expr: - expected_results -
+33_y: OK regex: 'a$'m parsed_regex: 'a$'m str: b
+a
+ result_expr: $-[0] expected_results 2
+34_y: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: b
+a result_expr: $-[0] expected_results 2
+35_y: OK regex: 'a\z'm parsed_regex: 'a\z'm str: b
+a result_expr: $-[0] expected_results 2
+36_y: OK regex: 'a$'m parsed_regex: 'a$'m str: b
+a result_expr: $-[0] expected_results 2
+37_n: OK regex: aa\Z parsed_regex: aa\Z str: aa
+b
+ result_expr: - expected_results -
+38_n: OK regex: aa\z parsed_regex: aa\z str: aa
+b
+ result_expr: - expected_results -
+39_n: OK regex: aa$ parsed_regex: aa$ str: aa
+b
+ result_expr: - expected_results -
+40_y: OK regex: aa\Z parsed_regex: aa\Z str: b
+aa
+ result_expr: $-[0] expected_results 2
+41_n: OK regex: aa\z parsed_regex: aa\z str: b
+aa
+ result_expr: - expected_results -
+42_y: OK regex: aa$ parsed_regex: aa$ str: b
+aa
+ result_expr: $-[0] expected_results 2
+43_y: OK regex: aa\Z parsed_regex: aa\Z str: b
+aa result_expr: $-[0] expected_results 2
+44_y: OK regex: aa\z parsed_regex: aa\z str: b
+aa result_expr: $-[0] expected_results 2
+45_y: OK regex: aa$ parsed_regex: aa$ str: b
+aa result_expr: $-[0] expected_results 2
+46_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: aa
+b
+ result_expr: - expected_results -
+47_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: aa
+b
+ result_expr: - expected_results -
+48_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: aa
+b
+ result_expr: $-[0] expected_results 0
+49_y: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+aa
+ result_expr: $-[0] expected_results 2
+50_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+aa
+ result_expr: - expected_results -
+51_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+aa
+ result_expr: $-[0] expected_results 2
+52_y: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+aa result_expr: $-[0] expected_results 2
+53_y: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+aa result_expr: $-[0] expected_results 2
+54_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+aa result_expr: $-[0] expected_results 2
+55_n: OK regex: aa\Z parsed_regex: aa\Z str: ac
+b
+ result_expr: - expected_results -
+56_n: OK regex: aa\z parsed_regex: aa\z str: ac
+b
+ result_expr: - expected_results -
+57_n: OK regex: aa$ parsed_regex: aa$ str: ac
+b
+ result_expr: - expected_results -
+58_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ac
+ result_expr: - expected_results -
+59_n: OK regex: aa\z parsed_regex: aa\z str: b
+ac
+ result_expr: - expected_results -
+60_n: OK regex: aa$ parsed_regex: aa$ str: b
+ac
+ result_expr: - expected_results -
+61_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ac result_expr: - expected_results -
+62_n: OK regex: aa\z parsed_regex: aa\z str: b
+ac result_expr: - expected_results -
+63_n: OK regex: aa$ parsed_regex: aa$ str: b
+ac result_expr: - expected_results -
+64_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: ac
+b
+ result_expr: - expected_results -
+65_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: ac
+b
+ result_expr: - expected_results -
+66_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: ac
+b
+ result_expr: - expected_results -
+67_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ac
+ result_expr: - expected_results -
+68_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ac
+ result_expr: - expected_results -
+69_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ac
+ result_expr: - expected_results -
+70_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ac result_expr: - expected_results -
+71_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ac result_expr: - expected_results -
+72_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ac result_expr: - expected_results -
+73_n: OK regex: aa\Z parsed_regex: aa\Z str: ca
+b
+ result_expr: - expected_results -
+74_n: OK regex: aa\z parsed_regex: aa\z str: ca
+b
+ result_expr: - expected_results -
+75_n: OK regex: aa$ parsed_regex: aa$ str: ca
+b
+ result_expr: - expected_results -
+76_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ca
+ result_expr: - expected_results -
+77_n: OK regex: aa\z parsed_regex: aa\z str: b
+ca
+ result_expr: - expected_results -
+78_n: OK regex: aa$ parsed_regex: aa$ str: b
+ca
+ result_expr: - expected_results -
+79_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ca result_expr: - expected_results -
+80_n: OK regex: aa\z parsed_regex: aa\z str: b
+ca result_expr: - expected_results -
+81_n: OK regex: aa$ parsed_regex: aa$ str: b
+ca result_expr: - expected_results -
+82_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: ca
+b
+ result_expr: - expected_results -
+83_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: ca
+b
+ result_expr: - expected_results -
+84_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: ca
+b
+ result_expr: - expected_results -
+85_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ca
+ result_expr: - expected_results -
+86_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ca
+ result_expr: - expected_results -
+87_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ca
+ result_expr: - expected_results -
+88_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ca result_expr: - expected_results -
+89_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ca result_expr: - expected_results -
+90_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ca result_expr: - expected_results -
+91_n: OK regex: ab\Z parsed_regex: ab\Z str: ab
+b
+ result_expr: - expected_results -
+92_n: OK regex: ab\z parsed_regex: ab\z str: ab
+b
+ result_expr: - expected_results -
+93_n: OK regex: ab$ parsed_regex: ab$ str: ab
+b
+ result_expr: - expected_results -
+94_y: OK regex: ab\Z parsed_regex: ab\Z str: b
+ab
+ result_expr: $-[0] expected_results 2
+95_n: OK regex: ab\z parsed_regex: ab\z str: b
+ab
+ result_expr: - expected_results -
+96_y: OK regex: ab$ parsed_regex: ab$ str: b
+ab
+ result_expr: $-[0] expected_results 2
+97_y: OK regex: ab\Z parsed_regex: ab\Z str: b
+ab result_expr: $-[0] expected_results 2
+98_y: OK regex: ab\z parsed_regex: ab\z str: b
+ab result_expr: $-[0] expected_results 2
+99_y: OK regex: ab$ parsed_regex: ab$ str: b
+ab result_expr: $-[0] expected_results 2
+100_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ab
+b
+ result_expr: - expected_results -
+101_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ab
+b
+ result_expr: - expected_results -
+102_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ab
+b
+ result_expr: $-[0] expected_results 0
+103_y: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ab
+ result_expr: $-[0] expected_results 2
+104_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ab
+ result_expr: - expected_results -
+105_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ab
+ result_expr: $-[0] expected_results 2
+106_y: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ab result_expr: $-[0] expected_results 2
+107_y: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ab result_expr: $-[0] expected_results 2
+108_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ab result_expr: $-[0] expected_results 2
+109_n: OK regex: ab\Z parsed_regex: ab\Z str: ac
+b
+ result_expr: - expected_results -
+110_n: OK regex: ab\z parsed_regex: ab\z str: ac
+b
+ result_expr: - expected_results -
+111_n: OK regex: ab$ parsed_regex: ab$ str: ac
+b
+ result_expr: - expected_results -
+112_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ac
+ result_expr: - expected_results -
+113_n: OK regex: ab\z parsed_regex: ab\z str: b
+ac
+ result_expr: - expected_results -
+114_n: OK regex: ab$ parsed_regex: ab$ str: b
+ac
+ result_expr: - expected_results -
+115_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ac result_expr: - expected_results -
+116_n: OK regex: ab\z parsed_regex: ab\z str: b
+ac result_expr: - expected_results -
+117_n: OK regex: ab$ parsed_regex: ab$ str: b
+ac result_expr: - expected_results -
+118_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ac
+b
+ result_expr: - expected_results -
+119_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ac
+b
+ result_expr: - expected_results -
+120_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ac
+b
+ result_expr: - expected_results -
+121_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ac
+ result_expr: - expected_results -
+122_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ac
+ result_expr: - expected_results -
+123_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ac
+ result_expr: - expected_results -
+124_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ac result_expr: - expected_results -
+125_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ac result_expr: - expected_results -
+126_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ac result_expr: - expected_results -
+127_n: OK regex: ab\Z parsed_regex: ab\Z str: ca
+b
+ result_expr: - expected_results -
+128_n: OK regex: ab\z parsed_regex: ab\z str: ca
+b
+ result_expr: - expected_results -
+129_n: OK regex: ab$ parsed_regex: ab$ str: ca
+b
+ result_expr: - expected_results -
+130_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ca
+ result_expr: - expected_results -
+131_n: OK regex: ab\z parsed_regex: ab\z str: b
+ca
+ result_expr: - expected_results -
+132_n: OK regex: ab$ parsed_regex: ab$ str: b
+ca
+ result_expr: - expected_results -
+133_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ca result_expr: - expected_results -
+134_n: OK regex: ab\z parsed_regex: ab\z str: b
+ca result_expr: - expected_results -
+135_n: OK regex: ab$ parsed_regex: ab$ str: b
+ca result_expr: - expected_results -
+136_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ca
+b
+ result_expr: - expected_results -
+137_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ca
+b
+ result_expr: - expected_results -
+138_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ca
+b
+ result_expr: - expected_results -
+139_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ca
+ result_expr: - expected_results -
+140_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ca
+ result_expr: - expected_results -
+141_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ca
+ result_expr: - expected_results -
+142_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ca result_expr: - expected_results -
+143_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ca result_expr: - expected_results -
+144_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ca result_expr: - expected_results -
+145_n: OK regex: abb\Z parsed_regex: abb\Z str: abb
+b
+ result_expr: - expected_results -
+146_n: OK regex: abb\z parsed_regex: abb\z str: abb
+b
+ result_expr: - expected_results -
+147_n: OK regex: abb$ parsed_regex: abb$ str: abb
+b
+ result_expr: - expected_results -
+148_y: OK regex: abb\Z parsed_regex: abb\Z str: b
+abb
+ result_expr: $-[0] expected_results 2
+149_n: OK regex: abb\z parsed_regex: abb\z str: b
+abb
+ result_expr: - expected_results -
+150_y: OK regex: abb$ parsed_regex: abb$ str: b
+abb
+ result_expr: $-[0] expected_results 2
+151_y: OK regex: abb\Z parsed_regex: abb\Z str: b
+abb result_expr: $-[0] expected_results 2
+152_y: OK regex: abb\z parsed_regex: abb\z str: b
+abb result_expr: $-[0] expected_results 2
+153_y: OK regex: abb$ parsed_regex: abb$ str: b
+abb result_expr: $-[0] expected_results 2
+154_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: abb
+b
+ result_expr: - expected_results -
+155_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: abb
+b
+ result_expr: - expected_results -
+156_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: abb
+b
+ result_expr: $-[0] expected_results 0
+157_y: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+abb
+ result_expr: $-[0] expected_results 2
+158_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+abb
+ result_expr: - expected_results -
+159_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+abb
+ result_expr: $-[0] expected_results 2
+160_y: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+abb result_expr: $-[0] expected_results 2
+161_y: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+abb result_expr: $-[0] expected_results 2
+162_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+abb result_expr: $-[0] expected_results 2
+163_n: OK regex: abb\Z parsed_regex: abb\Z str: ac
+b
+ result_expr: - expected_results -
+164_n: OK regex: abb\z parsed_regex: abb\z str: ac
+b
+ result_expr: - expected_results -
+165_n: OK regex: abb$ parsed_regex: abb$ str: ac
+b
+ result_expr: - expected_results -
+166_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ac
+ result_expr: - expected_results -
+167_n: OK regex: abb\z parsed_regex: abb\z str: b
+ac
+ result_expr: - expected_results -
+168_n: OK regex: abb$ parsed_regex: abb$ str: b
+ac
+ result_expr: - expected_results -
+169_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ac result_expr: - expected_results -
+170_n: OK regex: abb\z parsed_regex: abb\z str: b
+ac result_expr: - expected_results -
+171_n: OK regex: abb$ parsed_regex: abb$ str: b
+ac result_expr: - expected_results -
+172_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: ac
+b
+ result_expr: - expected_results -
+173_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: ac
+b
+ result_expr: - expected_results -
+174_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: ac
+b
+ result_expr: - expected_results -
+175_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ac
+ result_expr: - expected_results -
+176_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ac
+ result_expr: - expected_results -
+177_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ac
+ result_expr: - expected_results -
+178_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ac result_expr: - expected_results -
+179_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ac result_expr: - expected_results -
+180_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ac result_expr: - expected_results -
+181_n: OK regex: abb\Z parsed_regex: abb\Z str: ca
+b
+ result_expr: - expected_results -
+182_n: OK regex: abb\z parsed_regex: abb\z str: ca
+b
+ result_expr: - expected_results -
+183_n: OK regex: abb$ parsed_regex: abb$ str: ca
+b
+ result_expr: - expected_results -
+184_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ca
+ result_expr: - expected_results -
+185_n: OK regex: abb\z parsed_regex: abb\z str: b
+ca
+ result_expr: - expected_results -
+186_n: OK regex: abb$ parsed_regex: abb$ str: b
+ca
+ result_expr: - expected_results -
+187_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ca result_expr: - expected_results -
+188_n: OK regex: abb\z parsed_regex: abb\z str: b
+ca result_expr: - expected_results -
+189_n: OK regex: abb$ parsed_regex: abb$ str: b
+ca result_expr: - expected_results -
+190_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: ca
+b
+ result_expr: - expected_results -
+191_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: ca
+b
+ result_expr: - expected_results -
+192_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: ca
+b
+ result_expr: - expected_results -
+193_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ca
+ result_expr: - expected_results -
+194_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ca
+ result_expr: - expected_results -
+195_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ca
+ result_expr: - expected_results -
+196_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ca result_expr: - expected_results -
+197_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ca result_expr: - expected_results -
+198_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ca result_expr: - expected_results -
+199_y: OK regex: '\Aa$'m parsed_regex: '\Aa$'m str: a
+
+ result_expr: $& expected_results a
+
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_14_multiline_modifier.cpp.output b/regression-tests/test-results/gcc-10-c++20/pure2-regex_14_multiline_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_15_group_modifiers.cpp.execution b/regression-tests/test-results/gcc-10-c++20/pure2-regex_15_group_modifiers.cpp.execution
new file mode 100644
index 000000000..de92abc48
--- /dev/null
+++ b/regression-tests/test-results/gcc-10-c++20/pure2-regex_15_group_modifiers.cpp.execution
@@ -0,0 +1,87 @@
+Running tests_15_group_modifiers:
+01_y: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: ab result_expr: $& expected_results ab
+02_y: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: ab result_expr: $&:$1 expected_results ab:a
+03_y: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: Ab result_expr: $& expected_results Ab
+04_y: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: Ab result_expr: $&:$1 expected_results Ab:A
+05_n: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: aB result_expr: - expected_results -
+06_n: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: aB result_expr: - expected_results -
+07_y: OK regex: (?i:a)b parsed_regex: (?i:a)b str: ab result_expr: $& expected_results ab
+08_y: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: ab result_expr: $&:$1 expected_results ab:a
+09_y: OK regex: (?i:a)b parsed_regex: (?i:a)b str: Ab result_expr: $& expected_results Ab
+10_y: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: Ab result_expr: $&:$1 expected_results Ab:A
+11_n: OK regex: (?i:a)b parsed_regex: (?i:a)b str: aB result_expr: - expected_results -
+12_n: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: aB result_expr: - expected_results -
+13_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: ab result_expr: $& expected_results ab
+14_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: ab result_expr: $&:$1 expected_results ab:a
+15_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: aB result_expr: $& expected_results aB
+16_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: aB result_expr: $&:$1 expected_results aB:a
+17_n: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: Ab result_expr: - expected_results -
+18_n: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: Ab result_expr: - expected_results -
+19_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: aB result_expr: $& expected_results aB
+20_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: aB result_expr: $1 expected_results a
+21_n: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: AB result_expr: - expected_results -
+22_n: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: AB result_expr: - expected_results -
+23_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: ab result_expr: $& expected_results ab
+24_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: ab result_expr: $&:$1 expected_results ab:a
+25_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: aB result_expr: $& expected_results aB
+26_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: aB result_expr: $&:$1 expected_results aB:a
+27_n: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: Ab result_expr: - expected_results -
+28_n: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: Ab result_expr: - expected_results -
+29_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: aB result_expr: $& expected_results aB
+30_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: aB result_expr: $1 expected_results a
+31_n: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: AB result_expr: - expected_results -
+32_n: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: AB result_expr: - expected_results -
+33_n: OK regex: '((?-i:a.))b'i parsed_regex: '((?-i:a.))b'i str: a
+B result_expr: - expected_results -
+34_n: OK regex: '((?-i:a\N))b'i parsed_regex: '((?-i:a\N))b'i str: a
+B result_expr: - expected_results -
+35_y: OK regex: '((?s-i:a.))b'i parsed_regex: '((?s-i:a.))b'i str: a
+B result_expr: $1 expected_results a
+
+36_n: OK regex: '((?s-i:a\N))b'i parsed_regex: '((?s-i:a\N))b'i str: a
+B result_expr: - expected_results -
+37_n: OK regex: '((?s-i:a.))b'i parsed_regex: '((?s-i:a.))b'i str: B
+B result_expr: - expected_results -
+38_n: OK regex: '((?s-i:a\N))b'i parsed_regex: '((?s-i:a\N))b'i str: B
+B result_expr: - expected_results -
+39_y: OK regex: (?i:.[b].) parsed_regex: (?i:.[b].) str: abd result_expr: $& expected_results abd
+40_y: OK regex: (?i:\N[b]\N) parsed_regex: (?i:\N[b]\N) str: abd result_expr: $& expected_results abd
+41_n: OK regex: ^(?:a?b?)*$ parsed_regex: ^(?:a?b?)*$ str: a-- result_expr: - expected_results -
+42_y: OK regex: ((?s)^a(.))((?m)^b$) parsed_regex: ((?s)^a(.))((?m)^b$) str: a
+b
+c
+ result_expr: $1;$2;$3 expected_results a
+;
+;b
+43_y: OK regex: ((?m)^b$) parsed_regex: ((?m)^b$) str: a
+b
+c
+ result_expr: $1 expected_results b
+44_y: OK regex: (?m)^b parsed_regex: (?m)^b str: a
+b
+ result_expr: $& expected_results b
+45_y: OK regex: (?m)^(b) parsed_regex: (?m)^(b) str: a
+b
+ result_expr: $1 expected_results b
+46_y: OK regex: ((?m)^b) parsed_regex: ((?m)^b) str: a
+b
+ result_expr: $1 expected_results b
+47_y: OK regex: \n((?m)^b) parsed_regex: \n((?m)^b) str: a
+b
+ result_expr: $1 expected_results b
+48_n: OK regex: ^b parsed_regex: ^b str: a
+b
+c
+ result_expr: - expected_results -
+49_n: OK regex: ()^b parsed_regex: ()^b str: a
+b
+c
+ result_expr: - expected_results -
+50_y: OK regex: ((?m)^b) parsed_regex: ((?m)^b) str: a
+b
+c
+ result_expr: $1 expected_results b
+51_y: OK Warning: Parsed regex does not match. regex: '(foo)'n parsed_regex: '(?:foo)'n str: foobar result_expr: $&-$1 expected_results foo-
+52_y: OK Warning: Parsed regex does not match. regex: '(?-n)(foo)(?n)(bar)'n parsed_regex: '(?-n)(foo)(?n)(?:bar)'n str: foobar result_expr: $&-$1-$2 expected_results foobar-foo-
+53_y: OK Warning: Parsed regex does not match. regex: '(?-n:(foo)(?n:(bar)))'n parsed_regex: '(?-n:(foo)(?n:(?:bar)))'n str: foobar result_expr: $&-$1-$2 expected_results foobar-foo-
+
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_15_group_modifiers.cpp.output b/regression-tests/test-results/gcc-10-c++20/pure2-regex_15_group_modifiers.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_16_perl_syntax_modifier.cpp.execution b/regression-tests/test-results/gcc-10-c++20/pure2-regex_16_perl_syntax_modifier.cpp.execution
new file mode 100644
index 000000000..761720007
--- /dev/null
+++ b/regression-tests/test-results/gcc-10-c++20/pure2-regex_16_perl_syntax_modifier.cpp.execution
@@ -0,0 +1,35 @@
+Running tests_16_perl_syntax_modifier:
+01_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $& expected_results a
+02_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $-[0] expected_results 0
+03_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $+[0] expected_results 1
+04_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $& expected_results abbb
+05_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $-[0] expected_results 0
+06_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $+[0] expected_results 4
+07_y: OK Warning: Parsed regex does not match. regex: /a\N c/x parsed_regex: /a\Nc/x str: abc result_expr: $& expected_results abc
+08_y: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzc result_expr: $& expected_results axyzc
+09_n: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzd result_expr: - expected_results -
+10_yS: OK regex: /[a b]/x parsed_regex: /[a b]/x str:   result_expr: $& expected_results  
+11_n: OK regex: /[a b]/xx parsed_regex: /[a b]/xx str:   result_expr: - expected_results -
+12_y: OK regex: /[a\ b]/xx parsed_regex: /[a\ b]/xx str:   result_expr: $& expected_results  
+13_n: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: a result_expr: - expected_results -
+14_n: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: b result_expr: - expected_results -
+15_y: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: A result_expr: $& expected_results A
+16_yS: OK regex: /(?x:[a b])/xx parsed_regex: /(?x:[a b])/xx str:   result_expr: $& expected_results  
+17_n: OK regex: /(?xx:[a b])/x parsed_regex: /(?xx:[a b])/x str:   result_expr: - expected_results -
+18_yS: OK regex: /(?x)[a b]/xx parsed_regex: /(?x)[a b]/xx str:   result_expr: $& expected_results  
+19_n: OK regex: /(?xx)[a b]/x parsed_regex: /(?xx)[a b]/x str:   result_expr: - expected_results -
+20_yS: OK regex: /(?-x:[a b])/xx parsed_regex: /(?-x:[a b])/xx str:   result_expr: $& expected_results  
+21_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $& expected_results a
+22_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $-[0] expected_results 0
+23_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $+[0] expected_results 1
+24_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $& expected_results abbb
+25_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $-[0] expected_results 0
+26_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $+[0] expected_results 4
+27_y: OK Warning: Parsed regex does not match. regex: /a\N c/x parsed_regex: /a\Nc/x str: abc result_expr: $& expected_results abc
+28_y: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzc result_expr: $& expected_results axyzc
+29_n: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzd result_expr: - expected_results -
+30_y: OK regex: /[#]/ parsed_regex: /[#]/ str: a#b result_expr: $& expected_results #
+31_y: OK regex: /[#]b/ parsed_regex: /[#]b/ str: a#b result_expr: $& expected_results #b
+32_y: OK regex: /[#]/x parsed_regex: /[#]/x str: a#b result_expr: $& expected_results #
+33_y: OK regex: /[#]b/x parsed_regex: /[#]b/x str: a#b result_expr: $& expected_results #b
+
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_16_perl_syntax_modifier.cpp.output b/regression-tests/test-results/gcc-10-c++20/pure2-regex_16_perl_syntax_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_17_comments.cpp.execution b/regression-tests/test-results/gcc-10-c++20/pure2-regex_17_comments.cpp.execution
new file mode 100644
index 000000000..17c9a5d55
--- /dev/null
+++ b/regression-tests/test-results/gcc-10-c++20/pure2-regex_17_comments.cpp.execution
@@ -0,0 +1,5 @@
+Running tests_17_comments:
+01_y: OK regex: ^a(?#xxx){3}c parsed_regex: ^a(?#xxx){3}c str: aaac result_expr: $& expected_results aaac
+02_y: OK Warning: Parsed regex does not match. regex: '^a (?#xxx) (?#yyy) {3}c'x parsed_regex: '^a(?#xxx)(?#yyy){3}c'x str: aaac result_expr: $& expected_results aaac
+03_y: OK Warning: Parsed regex does not match. regex: 'foo # Match foo'x parsed_regex: 'foo'x str: foobar result_expr: $& expected_results foo
+
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_17_comments.cpp.output b/regression-tests/test-results/gcc-10-c++20/pure2-regex_17_comments.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_18_branch_reset.cpp.execution b/regression-tests/test-results/gcc-10-c++20/pure2-regex_18_branch_reset.cpp.execution
new file mode 100644
index 000000000..1d088ce31
--- /dev/null
+++ b/regression-tests/test-results/gcc-10-c++20/pure2-regex_18_branch_reset.cpp.execution
@@ -0,0 +1,17 @@
+Running tests_18_branch_reset:
+01_y: OK regex: (?|(a)) parsed_regex: (?|(a)) str: a result_expr: $1-$+ expected_results a-a
+02_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: d!o!da result_expr: $1-$2-$3 expected_results !o!-o-a
+03_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: aabc result_expr: $1-$2-$3 expected_results a--c
+04_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: ixyjp result_expr: $1-$2-$3 expected_results x-y-p
+05_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: a result_expr: $1 expected_results a
+06_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: b result_expr: $1 expected_results b
+07_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: c result_expr: $1 expected_results c
+08_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: d result_expr: $1 expected_results d
+09_y: OK regex: (.)(?|(.)(.)x|(.)d)(.) parsed_regex: (.)(?|(.)(.)x|(.)d)(.) str: abcde result_expr: $1-$2-$3-$4-$5- expected_results b-c--e--
+10_y: OK regex: (\N)(?|(\N)(\N)x|(\N)d)(\N) parsed_regex: (\N)(?|(\N)(\N)x|(\N)d)(\N) str: abcde result_expr: $1-$2-$3-$4-$5- expected_results b-c--e--
+11_yM: OK regex: (?|(?<foo>x)) parsed_regex: (?|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+12_yM: OK regex: (?|(?<foo>x)|(?<bar>y)) parsed_regex: (?|(?<foo>x)|(?<bar>y)) str: x result_expr: $+{foo} expected_results x
+13_yM: OK regex: (?|(?<bar>y)|(?<foo>x)) parsed_regex: (?|(?<bar>y)|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+14_yM: OK regex: (?<bar>)(?|(?<foo>x)) parsed_regex: (?<bar>)(?|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+15_y: OK regex: (?|(b)|()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(a)) parsed_regex: (?|(b)|()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(a)) str: a result_expr: $& expected_results a
+
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_18_branch_reset.cpp.output b/regression-tests/test-results/gcc-10-c++20/pure2-regex_18_branch_reset.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_19_lookahead.cpp.execution b/regression-tests/test-results/gcc-10-c++20/pure2-regex_19_lookahead.cpp.execution
new file mode 100644
index 000000000..7b34914b1
--- /dev/null
+++ b/regression-tests/test-results/gcc-10-c++20/pure2-regex_19_lookahead.cpp.execution
@@ -0,0 +1,77 @@
+Running tests_19_lookahead:
+01_y: OK regex: a(?!b). parsed_regex: a(?!b). str: abad result_expr: $& expected_results ad
+02_y: OK regex: (?=)a parsed_regex: (?=)a str: a result_expr: $& expected_results a
+03_y: OK regex: a(?=d). parsed_regex: a(?=d). str: abad result_expr: $& expected_results ad
+04_y: OK regex: a(?=c|d). parsed_regex: a(?=c|d). str: abad result_expr: $& expected_results ad
+05_y: OK regex: ^(?:b|a(?=(.)))*\1 parsed_regex: ^(?:b|a(?=(.)))*\1 str: abc result_expr: $& expected_results ab
+06_y: OK regex: (?=(a+?))(\1ab) parsed_regex: (?=(a+?))(\1ab) str: aaab result_expr: $2 expected_results aab
+07_n: OK regex: ^(?=(a+?))\1ab parsed_regex: ^(?=(a+?))\1ab str: aaab result_expr: - expected_results -
+08_y: OK regex: (?=(a+?))(\1ab) parsed_regex: (?=(a+?))(\1ab) str: aaab result_expr: $2 expected_results aab
+09_n: OK regex: ^(?=(a+?))\1ab parsed_regex: ^(?=(a+?))\1ab str: aaab result_expr: - expected_results -
+10_y: OK regex: (.*)(?=c) parsed_regex: (.*)(?=c) str: abcd result_expr: $1 expected_results ab
+11_yB: OK regex: (.*)(?=c)c parsed_regex: (.*)(?=c)c str: abcd result_expr: $1 expected_results ab
+12_y: OK regex: (.*)(?=b|c) parsed_regex: (.*)(?=b|c) str: abcd result_expr: $1 expected_results ab
+13_y: OK regex: (.*)(?=b|c)c parsed_regex: (.*)(?=b|c)c str: abcd result_expr: $1 expected_results ab
+14_y: OK regex: (.*)(?=c|b) parsed_regex: (.*)(?=c|b) str: abcd result_expr: $1 expected_results ab
+15_y: OK regex: (.*)(?=c|b)c parsed_regex: (.*)(?=c|b)c str: abcd result_expr: $1 expected_results ab
+16_y: OK regex: (.*)(?=[bc]) parsed_regex: (.*)(?=[bc]) str: abcd result_expr: $1 expected_results ab
+17_yB: OK regex: (.*)(?=[bc])c parsed_regex: (.*)(?=[bc])c str: abcd result_expr: $1 expected_results ab
+18_y: OK regex: (.*?)(?=c) parsed_regex: (.*?)(?=c) str: abcd result_expr: $1 expected_results ab
+19_yB: OK regex: (.*?)(?=c)c parsed_regex: (.*?)(?=c)c str: abcd result_expr: $1 expected_results ab
+20_y: OK regex: (.*?)(?=b|c) parsed_regex: (.*?)(?=b|c) str: abcd result_expr: $1 expected_results a
+21_y: OK regex: (.*?)(?=b|c)c parsed_regex: (.*?)(?=b|c)c str: abcd result_expr: $1 expected_results ab
+22_y: OK regex: (.*?)(?=c|b) parsed_regex: (.*?)(?=c|b) str: abcd result_expr: $1 expected_results a
+23_y: OK regex: (.*?)(?=c|b)c parsed_regex: (.*?)(?=c|b)c str: abcd result_expr: $1 expected_results ab
+24_y: OK regex: (.*?)(?=[bc]) parsed_regex: (.*?)(?=[bc]) str: abcd result_expr: $1 expected_results a
+25_yB: OK regex: (.*?)(?=[bc])c parsed_regex: (.*?)(?=[bc])c str: abcd result_expr: $1 expected_results ab
+26_y: OK regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) parsed_regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) str: aaaaaaaa result_expr: $1 expected_results aaaaaaa
+27_y: OK regex: a(?!b(?!c))(..) parsed_regex: a(?!b(?!c))(..) str: abababc result_expr: $1 expected_results bc
+28_y: OK regex: a(?!b(?=a))(..) parsed_regex: a(?!b(?=a))(..) str: abababc result_expr: $1 expected_results bc
+37_y: OK regex: X(\w+)(?=\s)|X(\w+) parsed_regex: X(\w+)(?=\s)|X(\w+) str: Xab result_expr: [$1-$2] expected_results [-ab]
+38_y: OK regex: ^a*(?=b)b parsed_regex: ^a*(?=b)b str: ab result_expr: $& expected_results ab
+39_y: OK regex: '(?!\A)x'm parsed_regex: '(?!\A)x'm str: a
+xb
+ result_expr: - expected_results -
+40_n: OK regex: '^(o)(?!.*\1)'i parsed_regex: '^(o)(?!.*\1)'i str: Oo result_expr: - expected_results -
+41_n: OK regex: .*a(?!(b|cd)*e).*f parsed_regex: .*a(?!(b|cd)*e).*f str: ......abef result_expr: - expected_results -
+42_y: OK regex: ^(a*?)(?!(aa|aaaa)*$) parsed_regex: ^(a*?)(?!(aa|aaaa)*$) str: aaaaaaaaaaaaaaaaaaaa result_expr: $1 expected_results a
+43_y: OK regex: (?!)+?|(.{2,4}) parsed_regex: (?!)+?|(.{2,4}) str: abcde result_expr: $1 expected_results abcd
+44_y: OK regex: ^(a*?)(?!(a{6}|a{5})*$) parsed_regex: ^(a*?)(?!(a{6}|a{5})*$) str: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa result_expr: $+[1] expected_results 12
+45_y: OK regex: a(?!b(?!c(?!d(?!e))))...(.) parsed_regex: a(?!b(?!c(?!d(?!e))))...(.) str: abxabcdxabcde result_expr: $1 expected_results e
+46_y: OK regex: X(?!b+(?!(c+)*(?!(c+)*d))).*X parsed_regex: X(?!b+(?!(c+)*(?!(c+)*d))).*X str: aXbbbbbbbcccccccccccccaaaX result_expr: - expected_results -
+47_y: OK regex: ((?s).)c(?!.) parsed_regex: ((?s).)c(?!.) str: a
+b
+c
+ result_expr: $1 expected_results 
+
+48_y: OK regex: ((?s).)c(?!.) parsed_regex: ((?s).)c(?!.) str: a
+b
+c
+ result_expr: $1:$& expected_results 
+:
+c
+49_y: OK regex: ((?s)b.)c(?!.) parsed_regex: ((?s)b.)c(?!.) str: a
+b
+c
+ result_expr: $1 expected_results b
+
+50_y: OK regex: ((?s)b.)c(?!.) parsed_regex: ((?s)b.)c(?!.) str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+51_y: OK regex: ((?s)b.)c(?!\N) parsed_regex: ((?s)b.)c(?!\N) str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+52_y: OK regex: '(b.)c(?!\N)'s parsed_regex: '(b.)c(?!\N)'s str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+53_n: OK regex: a*(?!) parsed_regex: a*(?!) str: aaaab result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-regex_19_lookahead.cpp.output b/regression-tests/test-results/gcc-10-c++20/pure2-regex_19_lookahead.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_01_char_matcher.cpp.execution b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_01_char_matcher.cpp.execution
new file mode 100644
index 000000000..af124736e
--- /dev/null
+++ b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_01_char_matcher.cpp.execution
@@ -0,0 +1,14 @@
+Running tests_01_char_matcher:
+01_y: OK regex: abc parsed_regex: abc str: abc result_expr: $& expected_results abc
+02_y: OK regex: abc parsed_regex: abc str: abc result_expr: $-[0] expected_results 0
+03_y: OK regex: abc parsed_regex: abc str: abc result_expr: $+[0] expected_results 3
+04_n: OK regex: abc parsed_regex: abc str: xbc result_expr: - expected_results -
+05_n: OK regex: abc parsed_regex: abc str: axc result_expr: - expected_results -
+06_n: OK regex: abc parsed_regex: abc str: abx result_expr: - expected_results -
+07_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $& expected_results abc
+08_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $-[0] expected_results 1
+09_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $+[0] expected_results 4
+10_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $& expected_results abc
+11_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $-[0] expected_results 2
+12_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $+[0] expected_results 5
+
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_01_char_matcher.cpp.output b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_01_char_matcher.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_02_ranges.cpp.execution b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_02_ranges.cpp.execution
new file mode 100644
index 000000000..dc0b36002
--- /dev/null
+++ b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_02_ranges.cpp.execution
@@ -0,0 +1,42 @@
+Running tests_02_ranges:
+01_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $& expected_results abc
+02_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $-[0] expected_results 0
+03_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $+[0] expected_results 3
+04_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $& expected_results abc
+05_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $-[0] expected_results 0
+06_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $+[0] expected_results 3
+07_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $& expected_results abbc
+08_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $-[0] expected_results 0
+09_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $+[0] expected_results 4
+10_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $& expected_results abbbbc
+11_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $-[0] expected_results 0
+12_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $+[0] expected_results 6
+13_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $& expected_results abbbbc
+14_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $-[0] expected_results 0
+15_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $+[0] expected_results 6
+16_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $& expected_results abbc
+17_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $-[0] expected_results 0
+18_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $+[0] expected_results 4
+19_n: OK regex: ab+bc parsed_regex: ab+bc str: abc result_expr: - expected_results -
+20_n: OK regex: ab+bc parsed_regex: ab+bc str: abq result_expr: - expected_results -
+21_n: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abq result_expr: - expected_results -
+22_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $& expected_results abbbbc
+23_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $-[0] expected_results 0
+24_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $+[0] expected_results 6
+25_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $& expected_results abbbbc
+26_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $-[0] expected_results 0
+27_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $+[0] expected_results 6
+28_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $& expected_results abbbbc
+29_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $-[0] expected_results 0
+30_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $+[0] expected_results 6
+31_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $& expected_results abbbbc
+32_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $-[0] expected_results 0
+33_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $+[0] expected_results 6
+34_n: OK regex: ab{4,5}bc parsed_regex: ab{4,5}bc str: abbbbc result_expr: - expected_results -
+35_y: OK regex: ab?bc parsed_regex: ab?bc str: abbc result_expr: $& expected_results abbc
+36_y: OK regex: ab?bc parsed_regex: ab?bc str: abc result_expr: $& expected_results abc
+37_y: OK regex: ab{0,1}bc parsed_regex: ab{0,1}bc str: abc result_expr: $& expected_results abc
+38_n: OK regex: ab?bc parsed_regex: ab?bc str: abbbbc result_expr: - expected_results -
+39_y: OK regex: ab?c parsed_regex: ab?c str: abc result_expr: $& expected_results abc
+40_y: OK regex: ab{0,1}c parsed_regex: ab{0,1}c str: abc result_expr: $& expected_results abc
+
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_02_ranges.cpp.output b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_02_ranges.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_03_wildcard.cpp.execution b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_03_wildcard.cpp.execution
new file mode 100644
index 000000000..f3f0ea9cc
--- /dev/null
+++ b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_03_wildcard.cpp.execution
@@ -0,0 +1,22 @@
+Running tests_03_wildcard:
+01_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $& expected_results a
+02_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $-[0] expected_results 0
+03_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $+[0] expected_results 1
+04_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $& expected_results abbb
+05_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $-[0] expected_results 0
+06_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+07_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $& expected_results a
+08_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $-[0] expected_results 0
+09_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $+[0] expected_results 1
+10_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $& expected_results abbb
+11_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $-[0] expected_results 0
+12_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+13_y: OK Warning: Parsed regex does not match. regex: \N{ 3 , 4 } parsed_regex: \N{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+14_y: OK regex: a.c parsed_regex: a.c str: abc result_expr: $& expected_results abc
+15_y: OK regex: a.c parsed_regex: a.c str: axc result_expr: $& expected_results axc
+16_y: OK regex: a\Nc parsed_regex: a\Nc str: abc result_expr: $& expected_results abc
+17_y: OK regex: a.*c parsed_regex: a.*c str: axyzc result_expr: $& expected_results axyzc
+18_y: OK regex: a\N*c parsed_regex: a\N*c str: axyzc result_expr: $& expected_results axyzc
+19_n: OK regex: a.*c parsed_regex: a.*c str: axyzd result_expr: - expected_results -
+20_n: OK regex: a\N*c parsed_regex: a\N*c str: axyzd result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_03_wildcard.cpp.output b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_03_wildcard.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_04_start_end.cpp.execution b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_04_start_end.cpp.execution
new file mode 100644
index 000000000..6fef36434
--- /dev/null
+++ b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_04_start_end.cpp.execution
@@ -0,0 +1,11 @@
+Running tests_04_start_end:
+01_y: OK regex: ^abc$ parsed_regex: ^abc$ str: abc result_expr: $& expected_results abc
+02_n: OK regex: ^abc$ parsed_regex: ^abc$ str: abcc result_expr: - expected_results -
+03_y: OK regex: ^abc parsed_regex: ^abc str: abcc result_expr: $& expected_results abc
+04_n: OK regex: ^abc$ parsed_regex: ^abc$ str: aabc result_expr: - expected_results -
+05_y: OK regex: abc$ parsed_regex: abc$ str: aabc result_expr: $& expected_results abc
+06_n: OK regex: abc$ parsed_regex: abc$ str: aabcd result_expr: - expected_results -
+07_y: OK regex: ^ parsed_regex: ^ str: abc result_expr: $& expected_results 
+08_y: OK regex: $ parsed_regex: $ str: abc result_expr: $& expected_results 
+09_n: OK regex: $b parsed_regex: $b str: b result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_04_start_end.cpp.output b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_04_start_end.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_05_classes.cpp.execution b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_05_classes.cpp.execution
new file mode 100644
index 000000000..306bf3395
--- /dev/null
+++ b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_05_classes.cpp.execution
@@ -0,0 +1,21 @@
+Running tests_05_classes:
+01_n: OK regex: a[bc]d parsed_regex: a[bc]d str: abc result_expr: - expected_results -
+02_y: OK regex: a[bc]d parsed_regex: a[bc]d str: abd result_expr: $& expected_results abd
+03_y: OK regex: a[b]d parsed_regex: a[b]d str: abd result_expr: $& expected_results abd
+04_y: OK regex: [a][b][d] parsed_regex: [a][b][d] str: abd result_expr: $& expected_results abd
+05_y: OK regex: .[b]. parsed_regex: .[b]. str: abd result_expr: $& expected_results abd
+06_n: OK regex: .[b]. parsed_regex: .[b]. str: aBd result_expr: - expected_results -
+07_n: OK regex: a[b-d]e parsed_regex: a[b-d]e str: abd result_expr: - expected_results -
+08_y: OK regex: a[b-d]e parsed_regex: a[b-d]e str: ace result_expr: $& expected_results ace
+09_y: OK regex: a[b-d] parsed_regex: a[b-d] str: aac result_expr: $& expected_results ac
+10_y: OK regex: a[-b] parsed_regex: a[-b] str: a- result_expr: $& expected_results a-
+11_y: OK regex: a[b-] parsed_regex: a[b-] str: a- result_expr: $& expected_results a-
+12_y: OK regex: a] parsed_regex: a] str: a] result_expr: $& expected_results a]
+13_y: OK regex: a[]]b parsed_regex: a[]]b str: a]b result_expr: $& expected_results a]b
+14_y: OK regex: a[^bc]d parsed_regex: a[^bc]d str: aed result_expr: $& expected_results aed
+15_n: OK regex: a[^bc]d parsed_regex: a[^bc]d str: abd result_expr: - expected_results -
+16_y: OK regex: a[^-b]c parsed_regex: a[^-b]c str: adc result_expr: $& expected_results adc
+17_n: OK regex: a[^-b]c parsed_regex: a[^-b]c str: a-c result_expr: - expected_results -
+18_n: OK regex: a[^]b]c parsed_regex: a[^]b]c str: a]c result_expr: - expected_results -
+19_y: OK regex: a[^]b]c parsed_regex: a[^]b]c str: adc result_expr: $& expected_results adc
+
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_05_classes.cpp.output b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_05_classes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_06_boundaries.cpp.execution b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_06_boundaries.cpp.execution
new file mode 100644
index 000000000..420a4c587
--- /dev/null
+++ b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_06_boundaries.cpp.execution
@@ -0,0 +1,19 @@
+Running tests_06_boundaries:
+01_y: OK regex: \ba\b parsed_regex: \ba\b str: a- result_expr: - expected_results -
+02_y: OK regex: \ba\b parsed_regex: \ba\b str: -a result_expr: - expected_results -
+03_y: OK regex: \ba\b parsed_regex: \ba\b str: -a- result_expr: - expected_results -
+04_n: OK regex: \by\b parsed_regex: \by\b str: xy result_expr: - expected_results -
+05_n: OK regex: \by\b parsed_regex: \by\b str: yz result_expr: - expected_results -
+06_n: OK regex: \by\b parsed_regex: \by\b str: xyz result_expr: - expected_results -
+07_n: OK regex: \Ba\B parsed_regex: \Ba\B str: a- result_expr: - expected_results -
+08_n: OK regex: \Ba\B parsed_regex: \Ba\B str: -a result_expr: - expected_results -
+09_n: OK regex: \Ba\B parsed_regex: \Ba\B str: -a- result_expr: - expected_results -
+10_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: - expected_results -
+11_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: $-[0] expected_results 1
+12_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: $+[0] expected_results 2
+13_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: - expected_results -
+14_y: OK regex: \by\B parsed_regex: \by\B str: yz result_expr: - expected_results -
+15_y: OK regex: \By\B parsed_regex: \By\B str: xyz result_expr: - expected_results -
+16_n: OK regex: \b parsed_regex: \b str:  result_expr: - expected_results -
+17_y: OK regex: \B parsed_regex: \B str:  result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_06_boundaries.cpp.output b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_06_boundaries.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_07_short_classes.cpp.execution b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_07_short_classes.cpp.execution
new file mode 100644
index 000000000..519c05f92
--- /dev/null
+++ b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_07_short_classes.cpp.execution
@@ -0,0 +1,26 @@
+Running tests_07_short_classes:
+01_y: OK regex: \w parsed_regex: \w str: a result_expr: - expected_results -
+02_n: OK regex: \w parsed_regex: \w str: - result_expr: - expected_results -
+03_n: OK regex: \W parsed_regex: \W str: a result_expr: - expected_results -
+04_y: OK regex: \W parsed_regex: \W str: - result_expr: - expected_results -
+05_y: OK regex: a\sb parsed_regex: a\sb str: a b result_expr: - expected_results -
+06_n: OK regex: a\sb parsed_regex: a\sb str: a-b result_expr: - expected_results -
+07_n: OK regex: a\Sb parsed_regex: a\Sb str: a b result_expr: - expected_results -
+08_y: OK regex: a\Sb parsed_regex: a\Sb str: a-b result_expr: - expected_results -
+09_y: OK regex: \d parsed_regex: \d str: 1 result_expr: - expected_results -
+10_n: OK regex: \d parsed_regex: \d str: - result_expr: - expected_results -
+11_n: OK regex: \D parsed_regex: \D str: 1 result_expr: - expected_results -
+12_y: OK regex: \D parsed_regex: \D str: - result_expr: - expected_results -
+13_y: OK regex: [\w] parsed_regex: [\w] str: a result_expr: - expected_results -
+14_n: OK regex: [\w] parsed_regex: [\w] str: - result_expr: - expected_results -
+15_n: OK regex: [\W] parsed_regex: [\W] str: a result_expr: - expected_results -
+16_y: OK regex: [\W] parsed_regex: [\W] str: - result_expr: - expected_results -
+17_y: OK regex: a[\s]b parsed_regex: a[\s]b str: a b result_expr: - expected_results -
+18_n: OK regex: a[\s]b parsed_regex: a[\s]b str: a-b result_expr: - expected_results -
+19_n: OK regex: a[\S]b parsed_regex: a[\S]b str: a b result_expr: - expected_results -
+20_y: OK regex: a[\S]b parsed_regex: a[\S]b str: a-b result_expr: - expected_results -
+21_y: OK regex: [\d] parsed_regex: [\d] str: 1 result_expr: - expected_results -
+22_n: OK regex: [\d] parsed_regex: [\d] str: - result_expr: - expected_results -
+23_n: OK regex: [\D] parsed_regex: [\D] str: 1 result_expr: - expected_results -
+24_y: OK regex: [\D] parsed_regex: [\D] str: - result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_07_short_classes.cpp.output b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_07_short_classes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_08_alternatives.cpp.execution b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_08_alternatives.cpp.execution
new file mode 100644
index 000000000..c12fd2afe
--- /dev/null
+++ b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_08_alternatives.cpp.execution
@@ -0,0 +1,4 @@
+Running tests_08_alternatives:
+01_y: OK regex: ab|cd parsed_regex: ab|cd str: abc result_expr: $& expected_results ab
+02_y: OK regex: ab|cd parsed_regex: ab|cd str: abcd result_expr: $& expected_results ab
+
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_08_alternatives.cpp.output b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_08_alternatives.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_09_groups.cpp.execution b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_09_groups.cpp.execution
new file mode 100644
index 000000000..05df860f9
--- /dev/null
+++ b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_09_groups.cpp.execution
@@ -0,0 +1,13 @@
+Running tests_09_groups:
+01_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $&-$1 expected_results ef-
+02_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $-[0] expected_results 1
+03_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $+[0] expected_results 3
+04_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $-[1] expected_results 1
+05_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $+[1] expected_results 1
+06_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $&-$1-$2 expected_results a-a-a
+07_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $-[0]-$-[1]-$-[2] expected_results 0-0-0
+08_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $+[0]-$+[1]-$+[2] expected_results 1-1-1
+09_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $&-$1-$2 expected_results abc-a-c
+10_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $-[0]-$-[1]-$-[2] expected_results 0-0-2
+11_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $+[0]-$+[1]-$+[2] expected_results 3-1-3
+
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_09_groups.cpp.output b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_09_groups.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_10_escapes.cpp.execution b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_10_escapes.cpp.execution
new file mode 100644
index 000000000..fe6e6efc9
--- /dev/null
+++ b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_10_escapes.cpp.execution
@@ -0,0 +1,39 @@
+Running tests_10_escapes:
+01_y: OK regex: a\(b parsed_regex: a\(b str: a(b result_expr: $&-$1 expected_results a(b-
+02_y: OK regex: a\(*b parsed_regex: a\(*b str: ab result_expr: $& expected_results ab
+03_y: OK regex: a\(*b parsed_regex: a\(*b str: a((b result_expr: $& expected_results a((b
+04_y: OK regex: a\\b parsed_regex: a\\b str: a\b result_expr: $& expected_results a\b
+05_y: OK regex: foo(\h+)bar parsed_regex: foo(\h+)bar str: foo	bar result_expr: $1 expected_results 	
+06_y: OK regex: (\H+)(\h) parsed_regex: (\H+)(\h) str: foo	bar result_expr: $1-$2 expected_results foo-	
+07_y: OK regex: (\h+)(\H) parsed_regex: (\h+)(\H) str: foo	bar result_expr: $1-$2 expected_results 	-b
+08_y: OK regex: foo(\h)bar parsed_regex: foo(\h)bar str: foo	bar result_expr: $1 expected_results 	
+09_y: OK regex: (\H)(\h) parsed_regex: (\H)(\h) str: foo	bar result_expr: $1-$2 expected_results o-	
+10_y: OK regex: (\h)(\H) parsed_regex: (\h)(\H) str: foo	bar result_expr: $1-$2 expected_results 	-b
+11_y: OK regex: foo(\v+)bar parsed_regex: foo(\v+)bar str: foo
+
+
+bar result_expr: $1 expected_results 
+
+
+
+12_y: OK regex: (\V+)(\v) parsed_regex: (\V+)(\v) str: foo
+
+
+bar result_expr: $1-$2 expected_results foo-
+13_y: OK regex: (\v+)(\V) parsed_regex: (\v+)(\V) str: foo
+
+
+bar result_expr: $1-$2 expected_results 
+
+
+-b
+14_y: OK regex: foo(\v)bar parsed_regex: foo(\v)bar str: foo
bar result_expr: $1 expected_results 
+15_y: OK regex: (\V)(\v) parsed_regex: (\V)(\v) str: foo
bar result_expr: $1-$2 expected_results o-
+16_y: OK regex: (\v)(\V) parsed_regex: (\v)(\V) str: foo
bar result_expr: $1-$2 expected_results 
-b
+17_y: OK regex: foo\t\n\r\f\a\ebar parsed_regex: foo\t\n\r\f\a\ebar str: foo	
+
bar result_expr: $& expected_results foo	
+
bar
+18_y: OK regex: foo\Kbar parsed_regex: foo\Kbar str: foobar result_expr: $& expected_results bar
+19_y: OK regex: \x41\x42 parsed_regex: \x41\x42 str: AB result_expr: $& expected_results AB
+20_y: OK regex: \101\o{102} parsed_regex: \101\o{102} str: AB result_expr: $& expected_results AB
+
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_10_escapes.cpp.output b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_10_escapes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_11_group_references.cpp.execution b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_11_group_references.cpp.execution
new file mode 100644
index 000000000..724d0085a
--- /dev/null
+++ b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_11_group_references.cpp.execution
@@ -0,0 +1,26 @@
+Running tests_11_group_references:
+01_y: OK regex: (foo)(\g-2) parsed_regex: (foo)(\g-2) str: foofoo result_expr: $1-$2 expected_results foo-foo
+02_y: OK regex: (foo)(\g-2)(foo)(\g-2) parsed_regex: (foo)(\g-2)(foo)(\g-2) str: foofoofoofoo result_expr: $1-$2-$3-$4 expected_results foo-foo-foo-foo
+03_y: OK regex: (([abc]+) \g-1)(([abc]+) \g{-1}) parsed_regex: (([abc]+) \g-1)(([abc]+) \g{-1}) str: abc abccba cba result_expr: $2-$4 expected_results abc-cba
+04_y: OK regex: (a)(b)(c)\g1\g2\g3 parsed_regex: (a)(b)(c)\g1\g2\g3 str: abcabc result_expr: $1$2$3 expected_results abc
+05_y: OK regex: /(?'n'foo) \g{n}/ parsed_regex: /(?'n'foo) \g{n}/ str: ..foo foo.. result_expr: $1 expected_results foo
+06_y: OK regex: /(?'n'foo) \g{ n }/ parsed_regex: /(?'n'foo) \g{ n }/ str: ..foo foo.. result_expr: $1 expected_results foo
+07_yM: OK regex: /(?'n'foo) \g{n}/ parsed_regex: /(?'n'foo) \g{n}/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+08_y: OK regex: /(?<n>foo) \g{n}/ parsed_regex: /(?<n>foo) \g{n}/ str: ..foo foo.. result_expr: $1 expected_results foo
+09_yM: OK regex: /(?<n>foo) \g{n}/ parsed_regex: /(?<n>foo) \g{n}/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+10_y: OK regex: /(?<as>as) (\w+) \g{as} (\w+)/ parsed_regex: /(?<as>as) (\w+) \g{as} (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+11_y: OK regex: /(?'n'foo) \k<n>/ parsed_regex: /(?'n'foo) \k<n>/ str: ..foo foo.. result_expr: $1 expected_results foo
+12_yM: OK regex: /(?'n'foo) \k<n>/ parsed_regex: /(?'n'foo) \k<n>/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+13_y: OK regex: /(?<n>foo) \k'n'/ parsed_regex: /(?<n>foo) \k'n'/ str: ..foo foo.. result_expr: $1 expected_results foo
+14_yM: OK regex: /(?<n>foo) \k'n'/ parsed_regex: /(?<n>foo) \k'n'/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+15_yM: OK regex: /(?'a1'foo) \k'a1'/ parsed_regex: /(?'a1'foo) \k'a1'/ str: ..foo foo.. result_expr: $+{a1} expected_results foo
+16_yM: OK regex: /(?<a1>foo) \k<a1>/ parsed_regex: /(?<a1>foo) \k<a1>/ str: ..foo foo.. result_expr: $+{a1} expected_results foo
+17_yM: OK regex: /(?'_'foo) \k'_'/ parsed_regex: /(?'_'foo) \k'_'/ str: ..foo foo.. result_expr: $+{_} expected_results foo
+18_yM: OK regex: /(?<_>foo) \k<_>/ parsed_regex: /(?<_>foo) \k<_>/ str: ..foo foo.. result_expr: $+{_} expected_results foo
+19_yM: OK regex: /(?'_0_'foo) \k'_0_'/ parsed_regex: /(?'_0_'foo) \k'_0_'/ str: ..foo foo.. result_expr: $+{_0_} expected_results foo
+20_yM: OK regex: /(?<_0_>foo) \k<_0_>/ parsed_regex: /(?<_0_>foo) \k<_0_>/ str: ..foo foo.. result_expr: $+{_0_} expected_results foo
+21_y: OK regex: /(?<as>as) (\w+) \k<as> (\w+)/ parsed_regex: /(?<as>as) (\w+) \k<as> (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+22_y: OK regex: /(?<as>as) (\w+) \k{as} (\w+)/ parsed_regex: /(?<as>as) (\w+) \k{as} (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+23_y: OK regex: /(?<as>as) (\w+) \k'as' (\w+)/ parsed_regex: /(?<as>as) (\w+) \k'as' (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+24_y: OK regex: /(?<as>as) (\w+) \k{ as } (\w+)/ parsed_regex: /(?<as>as) (\w+) \k{ as } (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_11_group_references.cpp.output b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_11_group_references.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_12_case_insensitive.cpp.execution b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_12_case_insensitive.cpp.execution
new file mode 100644
index 000000000..4939deb24
--- /dev/null
+++ b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_12_case_insensitive.cpp.execution
@@ -0,0 +1,121 @@
+Running tests_12_case_insensitive:
+01_y: OK regex: 'abc'i parsed_regex: 'abc'i str: ABC result_expr: $& expected_results ABC
+02_n: OK regex: 'abc'i parsed_regex: 'abc'i str: XBC result_expr: - expected_results -
+03_n: OK regex: 'abc'i parsed_regex: 'abc'i str: AXC result_expr: - expected_results -
+04_n: OK regex: 'abc'i parsed_regex: 'abc'i str: ABX result_expr: - expected_results -
+05_y: OK regex: 'abc'i parsed_regex: 'abc'i str: XABCY result_expr: $& expected_results ABC
+06_y: OK regex: 'abc'i parsed_regex: 'abc'i str: ABABC result_expr: $& expected_results ABC
+07_y: OK regex: 'ab*c'i parsed_regex: 'ab*c'i str: ABC result_expr: $& expected_results ABC
+08_y: OK regex: 'ab*bc'i parsed_regex: 'ab*bc'i str: ABC result_expr: $& expected_results ABC
+09_y: OK regex: 'ab*bc'i parsed_regex: 'ab*bc'i str: ABBC result_expr: $& expected_results ABBC
+10_y: OK regex: 'ab*?bc'i parsed_regex: 'ab*?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+11_y: OK regex: 'ab{0,}?bc'i parsed_regex: 'ab{0,}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+12_y: OK regex: 'ab+?bc'i parsed_regex: 'ab+?bc'i str: ABBC result_expr: $& expected_results ABBC
+13_n: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABC result_expr: - expected_results -
+14_n: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABQ result_expr: - expected_results -
+15_n: OK regex: 'ab{1,}bc'i parsed_regex: 'ab{1,}bc'i str: ABQ result_expr: - expected_results -
+16_y: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+17_y: OK regex: 'ab{1,}?bc'i parsed_regex: 'ab{1,}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+18_y: OK regex: 'ab{1,3}?bc'i parsed_regex: 'ab{1,3}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+19_y: OK regex: 'ab{3,4}?bc'i parsed_regex: 'ab{3,4}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+20_n: OK regex: 'ab{4,5}?bc'i parsed_regex: 'ab{4,5}?bc'i str: ABBBBC result_expr: - expected_results -
+21_y: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABBC result_expr: $& expected_results ABBC
+22_y: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABC result_expr: $& expected_results ABC
+23_y: OK regex: 'ab{0,1}?bc'i parsed_regex: 'ab{0,1}?bc'i str: ABC result_expr: $& expected_results ABC
+24_n: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABBBBC result_expr: - expected_results -
+25_y: OK regex: 'ab??c'i parsed_regex: 'ab??c'i str: ABC result_expr: $& expected_results ABC
+26_y: OK regex: 'ab{0,1}?c'i parsed_regex: 'ab{0,1}?c'i str: ABC result_expr: $& expected_results ABC
+27_y: OK regex: '^abc$'i parsed_regex: '^abc$'i str: ABC result_expr: $& expected_results ABC
+28_n: OK regex: '^abc$'i parsed_regex: '^abc$'i str: ABCC result_expr: - expected_results -
+29_y: OK regex: '^abc'i parsed_regex: '^abc'i str: ABCC result_expr: $& expected_results ABC
+30_n: OK regex: '^abc$'i parsed_regex: '^abc$'i str: AABC result_expr: - expected_results -
+31_y: OK regex: 'abc$'i parsed_regex: 'abc$'i str: AABC result_expr: $& expected_results ABC
+32_y: OK regex: '^'i parsed_regex: '^'i str: ABC result_expr: $& expected_results 
+33_y: OK regex: '$'i parsed_regex: '$'i str: ABC result_expr: $& expected_results 
+34_y: OK regex: 'a.c'i parsed_regex: 'a.c'i str: ABC result_expr: $& expected_results ABC
+35_y: OK regex: 'a.c'i parsed_regex: 'a.c'i str: AXC result_expr: $& expected_results AXC
+36_y: OK regex: 'a\Nc'i parsed_regex: 'a\Nc'i str: ABC result_expr: $& expected_results ABC
+37_y: OK regex: 'a.*?c'i parsed_regex: 'a.*?c'i str: AXYZC result_expr: $& expected_results AXYZC
+38_n: OK regex: 'a.*c'i parsed_regex: 'a.*c'i str: AXYZD result_expr: - expected_results -
+39_n: OK regex: 'a[bc]d'i parsed_regex: 'a[bc]d'i str: ABC result_expr: - expected_results -
+40_y: OK regex: 'a[bc]d'i parsed_regex: 'a[bc]d'i str: ABD result_expr: $& expected_results ABD
+41_n: OK regex: 'a[b-d]e'i parsed_regex: 'a[b-d]e'i str: ABD result_expr: - expected_results -
+42_y: OK regex: 'a[b-d]e'i parsed_regex: 'a[b-d]e'i str: ACE result_expr: $& expected_results ACE
+43_y: OK regex: 'a[b-d]'i parsed_regex: 'a[b-d]'i str: AAC result_expr: $& expected_results AC
+44_y: OK regex: 'a[-b]'i parsed_regex: 'a[-b]'i str: A- result_expr: $& expected_results A-
+45_y: OK regex: 'a[b-]'i parsed_regex: 'a[b-]'i str: A- result_expr: $& expected_results A-
+46_y: OK regex: 'a]'i parsed_regex: 'a]'i str: A] result_expr: $& expected_results A]
+47_y: OK regex: 'a[]]b'i parsed_regex: 'a[]]b'i str: A]B result_expr: $& expected_results A]B
+48_y: OK regex: 'a[^bc]d'i parsed_regex: 'a[^bc]d'i str: AED result_expr: $& expected_results AED
+49_n: OK regex: 'a[^bc]d'i parsed_regex: 'a[^bc]d'i str: ABD result_expr: - expected_results -
+50_y: OK regex: 'a[^-b]c'i parsed_regex: 'a[^-b]c'i str: ADC result_expr: $& expected_results ADC
+51_n: OK regex: 'a[^-b]c'i parsed_regex: 'a[^-b]c'i str: A-C result_expr: - expected_results -
+52_n: OK regex: 'a[^]b]c'i parsed_regex: 'a[^]b]c'i str: A]C result_expr: - expected_results -
+53_y: OK regex: 'a[^]b]c'i parsed_regex: 'a[^]b]c'i str: ADC result_expr: $& expected_results ADC
+54_y: OK regex: 'ab|cd'i parsed_regex: 'ab|cd'i str: ABC result_expr: $& expected_results AB
+55_y: OK regex: 'ab|cd'i parsed_regex: 'ab|cd'i str: ABCD result_expr: $& expected_results AB
+56_y: OK regex: '()ef'i parsed_regex: '()ef'i str: DEF result_expr: $&-$1 expected_results EF-
+57_n: OK regex: '$b'i parsed_regex: '$b'i str: B result_expr: - expected_results -
+58_y: OK regex: 'a\(b'i parsed_regex: 'a\(b'i str: A(B result_expr: $&-$1 expected_results A(B-
+59_y: OK regex: 'a\(*b'i parsed_regex: 'a\(*b'i str: AB result_expr: $& expected_results AB
+60_y: OK regex: 'a\(*b'i parsed_regex: 'a\(*b'i str: A((B result_expr: $& expected_results A((B
+61_y: OK regex: 'a\\b'i parsed_regex: 'a\\b'i str: A\B result_expr: $& expected_results A\B
+62_y: OK regex: '((a))'i parsed_regex: '((a))'i str: ABC result_expr: $&-$1-$2 expected_results A-A-A
+63_y: OK regex: '(a)b(c)'i parsed_regex: '(a)b(c)'i str: ABC result_expr: $&-$1-$2 expected_results ABC-A-C
+64_y: OK regex: 'a+b+c'i parsed_regex: 'a+b+c'i str: AABBABC result_expr: $& expected_results ABC
+65_y: OK regex: 'a{1,}b{1,}c'i parsed_regex: 'a{1,}b{1,}c'i str: AABBABC result_expr: $& expected_results ABC
+66_y: OK regex: 'a.+?c'i parsed_regex: 'a.+?c'i str: ABCABC result_expr: $& expected_results ABC
+67_y: OK regex: 'a.*?c'i parsed_regex: 'a.*?c'i str: ABCABC result_expr: $& expected_results ABC
+68_y: OK regex: 'a.{0,5}?c'i parsed_regex: 'a.{0,5}?c'i str: ABCABC result_expr: $& expected_results ABC
+69_y: OK regex: '(a+|b)*'i parsed_regex: '(a+|b)*'i str: AB result_expr: $&-$1 expected_results AB-B
+70_y: OK regex: '(a+|b){0,}'i parsed_regex: '(a+|b){0,}'i str: AB result_expr: $&-$1 expected_results AB-B
+71_y: OK regex: '(a+|b)+'i parsed_regex: '(a+|b)+'i str: AB result_expr: $&-$1 expected_results AB-B
+72_y: OK regex: '(a+|b){1,}'i parsed_regex: '(a+|b){1,}'i str: AB result_expr: $&-$1 expected_results AB-B
+73_y: OK regex: '(a+|b)?'i parsed_regex: '(a+|b)?'i str: AB result_expr: $&-$1 expected_results A-A
+74_y: OK regex: '(a+|b){0,1}'i parsed_regex: '(a+|b){0,1}'i str: AB result_expr: $&-$1 expected_results A-A
+75_y: OK regex: '(a+|b){0,1}?'i parsed_regex: '(a+|b){0,1}?'i str: AB result_expr: $&-$1 expected_results -
+76_y: OK regex: '[^ab]*'i parsed_regex: '[^ab]*'i str: CDE result_expr: $& expected_results CDE
+77_n: OK regex: 'abc'i parsed_regex: 'abc'i str:  result_expr: - expected_results -
+78_y: OK regex: 'a*'i parsed_regex: 'a*'i str:  result_expr: $& expected_results 
+79_y: OK regex: '([abc])*d'i parsed_regex: '([abc])*d'i str: ABBBCD result_expr: $&-$1 expected_results ABBBCD-C
+80_y: OK regex: '([abc])*bcd'i parsed_regex: '([abc])*bcd'i str: ABCD result_expr: $&-$1 expected_results ABCD-A
+81_y: OK regex: 'a|b|c|d|e'i parsed_regex: 'a|b|c|d|e'i str: E result_expr: $& expected_results E
+82_y: OK regex: '(a|b|c|d|e)f'i parsed_regex: '(a|b|c|d|e)f'i str: EF result_expr: $&-$1 expected_results EF-E
+83_y: OK regex: 'abcd*efg'i parsed_regex: 'abcd*efg'i str: ABCDEFG result_expr: $& expected_results ABCDEFG
+84_y: OK regex: 'ab*'i parsed_regex: 'ab*'i str: XABYABBBZ result_expr: $& expected_results AB
+85_y: OK regex: 'ab*'i parsed_regex: 'ab*'i str: XAYABBBZ result_expr: $& expected_results A
+86_y: OK regex: '(ab|cd)e'i parsed_regex: '(ab|cd)e'i str: ABCDE result_expr: $&-$1 expected_results CDE-CD
+87_y: OK regex: '[abhgefdc]ij'i parsed_regex: '[abhgefdc]ij'i str: HIJ result_expr: $& expected_results HIJ
+88_n: OK regex: '^(ab|cd)e'i parsed_regex: '^(ab|cd)e'i str: ABCDE result_expr: x$1y expected_results XY
+89_y: OK regex: '(abc|)ef'i parsed_regex: '(abc|)ef'i str: ABCDEF result_expr: $&-$1 expected_results EF-
+90_y: OK regex: '(a|b)c*d'i parsed_regex: '(a|b)c*d'i str: ABCD result_expr: $&-$1 expected_results BCD-B
+91_y: OK regex: '(ab|ab*)bc'i parsed_regex: '(ab|ab*)bc'i str: ABC result_expr: $&-$1 expected_results ABC-A
+92_y: OK regex: 'a([bc]*)c*'i parsed_regex: 'a([bc]*)c*'i str: ABC result_expr: $&-$1 expected_results ABC-BC
+93_y: OK regex: 'a([bc]*)(c*d)'i parsed_regex: 'a([bc]*)(c*d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-BC-D
+94_y: OK regex: 'a([bc]+)(c*d)'i parsed_regex: 'a([bc]+)(c*d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-BC-D
+95_y: OK regex: 'a([bc]*)(c+d)'i parsed_regex: 'a([bc]*)(c+d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-B-CD
+96_y: OK regex: 'a[bcd]*dcdcde'i parsed_regex: 'a[bcd]*dcdcde'i str: ADCDCDE result_expr: $& expected_results ADCDCDE
+97_n: OK regex: 'a[bcd]+dcdcde'i parsed_regex: 'a[bcd]+dcdcde'i str: ADCDCDE result_expr: - expected_results -
+98_y: OK regex: '(ab|a)b*c'i parsed_regex: '(ab|a)b*c'i str: ABC result_expr: $&-$1 expected_results ABC-AB
+99_y: OK regex: '((a)(b)c)(d)'i parsed_regex: '((a)(b)c)(d)'i str: ABCD result_expr: $1-$2-$3-$4 expected_results ABC-A-B-D
+100_y: OK regex: '[a-zA-Z_][a-zA-Z0-9_]*'i parsed_regex: '[a-zA-Z_][a-zA-Z0-9_]*'i str: ALPHA result_expr: $& expected_results ALPHA
+101_y: OK regex: '^a(bc+|b[eh])g|.h$'i parsed_regex: '^a(bc+|b[eh])g|.h$'i str: ABH result_expr: $&-$1 expected_results BH-
+102_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: EFFGZ result_expr: $&-$1-$2 expected_results EFFGZ-EFFGZ-
+103_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: IJ result_expr: $&-$1-$2 expected_results IJ-IJ-J
+104_n: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: EFFG result_expr: - expected_results -
+105_n: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: BCDD result_expr: - expected_results -
+106_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: REFFGZ result_expr: $&-$1-$2 expected_results EFFGZ-EFFGZ-
+107_y: OK regex: '((((((((((a))))))))))'i parsed_regex: '((((((((((a))))))))))'i str: A result_expr: $10 expected_results A
+108_y: OK regex: '((((((((((a))))))))))\10'i parsed_regex: '((((((((((a))))))))))\10'i str: AA result_expr: $& expected_results AA
+109_y: OK regex: '(((((((((a)))))))))'i parsed_regex: '(((((((((a)))))))))'i str: A result_expr: $& expected_results A
+110_n: OK regex: 'multiple words of text'i parsed_regex: 'multiple words of text'i str: UH-UH result_expr: - expected_results -
+111_y: OK regex: 'multiple words'i parsed_regex: 'multiple words'i str: MULTIPLE WORDS, YEAH result_expr: $& expected_results MULTIPLE WORDS
+112_y: OK regex: '(.*)c(.*)'i parsed_regex: '(.*)c(.*)'i str: ABCDE result_expr: $&-$1-$2 expected_results ABCDE-AB-DE
+113_y: OK regex: '\((.*), (.*)\)'i parsed_regex: '\((.*), (.*)\)'i str: (A, B) result_expr: ($2, $1) expected_results (B, A)
+114_n: OK regex: '[k]'i parsed_regex: '[k]'i str: AB result_expr: - expected_results -
+115_y: OK regex: 'abcd'i parsed_regex: 'abcd'i str: ABCD result_expr: $& expected_results ABCD
+116_y: OK regex: 'a(bc)d'i parsed_regex: 'a(bc)d'i str: ABCD result_expr: $1 expected_results BC
+117_y: OK regex: 'a[-]?c'i parsed_regex: 'a[-]?c'i str: AC result_expr: $& expected_results AC
+118_y: OK regex: '(abc)\1'i parsed_regex: '(abc)\1'i str: ABCABC result_expr: $1 expected_results ABC
+119_y: OK regex: '([a-c]*)\1'i parsed_regex: '([a-c]*)\1'i str: ABCABC result_expr: $1 expected_results ABC
+
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_12_case_insensitive.cpp.output b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_12_case_insensitive.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_13_posessive_modifier.cpp.execution b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_13_posessive_modifier.cpp.execution
new file mode 100644
index 000000000..916d1a084
--- /dev/null
+++ b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_13_posessive_modifier.cpp.execution
@@ -0,0 +1,50 @@
+Running tests_13_posessive_modifier:
+01_n: OK regex: a++a parsed_regex: a++a str: aaaaa result_expr: - expected_results -
+02_n: OK regex: a*+a parsed_regex: a*+a str: aaaaa result_expr: - expected_results -
+03_n: OK regex: a{1,5}+a parsed_regex: a{1,5}+a str: aaaaa result_expr: - expected_results -
+04_n: OK regex: a?+a parsed_regex: a?+a str: ab result_expr: - expected_results -
+05_y: OK regex: a++b parsed_regex: a++b str: aaaaab result_expr: $& expected_results aaaaab
+06_y: OK regex: a*+b parsed_regex: a*+b str: aaaaab result_expr: $& expected_results aaaaab
+07_y: OK regex: a{1,5}+b parsed_regex: a{1,5}+b str: aaaaab result_expr: $& expected_results aaaaab
+08_y: OK regex: a?+b parsed_regex: a?+b str: ab result_expr: $& expected_results ab
+09_n: OK regex: fooa++a parsed_regex: fooa++a str: fooaaaaa result_expr: - expected_results -
+10_n: OK regex: fooa*+a parsed_regex: fooa*+a str: fooaaaaa result_expr: - expected_results -
+11_n: OK regex: fooa{1,5}+a parsed_regex: fooa{1,5}+a str: fooaaaaa result_expr: - expected_results -
+12_n: OK regex: fooa?+a parsed_regex: fooa?+a str: fooab result_expr: - expected_results -
+13_y: OK regex: fooa++b parsed_regex: fooa++b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+14_y: OK regex: fooa*+b parsed_regex: fooa*+b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+15_y: OK regex: fooa{1,5}+b parsed_regex: fooa{1,5}+b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+16_y: OK regex: fooa?+b parsed_regex: fooa?+b str: fooab result_expr: $& expected_results fooab
+17_n: OK regex: (aA)++(aA) parsed_regex: (aA)++(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+18_n: OK regex: (aA|bB)++(aA|bB) parsed_regex: (aA|bB)++(aA|bB) str: aAaAbBaAbB result_expr: - expected_results aAaAbBaAbB
+19_n: OK regex: (aA)*+(aA) parsed_regex: (aA)*+(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+20_n: OK regex: (aA|bB)*+(aA|bB) parsed_regex: (aA|bB)*+(aA|bB) str: aAaAbBaAaA result_expr: - expected_results aAaAbBaAaA
+21_n: OK regex: (aA){1,5}+(aA) parsed_regex: (aA){1,5}+(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+22_n: OK regex: (aA|bB){1,5}+(aA|bB) parsed_regex: (aA|bB){1,5}+(aA|bB) str: aAaAbBaAaA result_expr: - expected_results aAaAbBaAaA
+23_n: OK regex: (aA)?+(aA) parsed_regex: (aA)?+(aA) str: aAb result_expr: - expected_results aAb
+24_n: OK regex: (aA|bB)?+(aA|bB) parsed_regex: (aA|bB)?+(aA|bB) str: bBb result_expr: - expected_results bBb
+25_y: OK regex: (aA)++b parsed_regex: (aA)++b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+26_y: OK regex: (aA|bB)++b parsed_regex: (aA|bB)++b str: aAbBaAaAbBb result_expr: $& expected_results aAbBaAaAbBb
+27_y: OK regex: (aA)*+b parsed_regex: (aA)*+b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+28_y: OK regex: (aA|bB)*+b parsed_regex: (aA|bB)*+b str: bBbBbBbBbBb result_expr: $& expected_results bBbBbBbBbBb
+29_y: OK regex: (aA){1,5}+b parsed_regex: (aA){1,5}+b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+30_y: OK regex: (aA|bB){1,5}+b parsed_regex: (aA|bB){1,5}+b str: bBaAbBaAbBb result_expr: $& expected_results bBaAbBaAbBb
+31_y: OK regex: (aA)?+b parsed_regex: (aA)?+b str: aAb result_expr: $& expected_results aAb
+32_y: OK regex: (aA|bB)?+b parsed_regex: (aA|bB)?+b str: bBb result_expr: $& expected_results bBb
+33_n: OK regex: foo(aA)++(aA) parsed_regex: foo(aA)++(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+34_n: OK regex: foo(aA|bB)++(aA|bB) parsed_regex: foo(aA|bB)++(aA|bB) str: foobBbBbBaAaA result_expr: - expected_results foobBbBbBaAaA
+35_n: OK regex: foo(aA)*+(aA) parsed_regex: foo(aA)*+(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+36_n: OK regex: foo(aA|bB)*+(aA|bB) parsed_regex: foo(aA|bB)*+(aA|bB) str: foobBaAbBaAaA result_expr: - expected_results foobBaAbBaAaA
+37_n: OK regex: foo(aA){1,5}+(aA) parsed_regex: foo(aA){1,5}+(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+38_n: OK regex: foo(aA|bB){1,5}+(aA|bB) parsed_regex: foo(aA|bB){1,5}+(aA|bB) str: fooaAbBbBaAaA result_expr: - expected_results fooaAbBbBaAaA
+39_n: OK regex: foo(aA)?+(aA) parsed_regex: foo(aA)?+(aA) str: fooaAb result_expr: - expected_results fooaAb
+40_n: OK regex: foo(aA|bB)?+(aA|bB) parsed_regex: foo(aA|bB)?+(aA|bB) str: foobBb result_expr: - expected_results foobBb
+41_y: OK regex: foo(aA)++b parsed_regex: foo(aA)++b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+42_y: OK regex: foo(aA|bB)++b parsed_regex: foo(aA|bB)++b str: foobBaAbBaAbBb result_expr: $& expected_results foobBaAbBaAbBb
+43_y: OK regex: foo(aA)*+b parsed_regex: foo(aA)*+b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+44_y: OK regex: foo(aA|bB)*+b parsed_regex: foo(aA|bB)*+b str: foobBbBaAaAaAb result_expr: $& expected_results foobBbBaAaAaAb
+45_y: OK regex: foo(aA){1,5}+b parsed_regex: foo(aA){1,5}+b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+46_y: OK regex: foo(aA|bB){1,5}+b parsed_regex: foo(aA|bB){1,5}+b str: foobBaAaAaAaAb result_expr: $& expected_results foobBaAaAaAaAb
+47_y: OK regex: foo(aA)?+b parsed_regex: foo(aA)?+b str: fooaAb result_expr: $& expected_results fooaAb
+48_y: OK regex: foo(aA|bB)?+b parsed_regex: foo(aA|bB)?+b str: foobBb result_expr: $& expected_results foobBb
+
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_13_posessive_modifier.cpp.output b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_13_posessive_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_14_multiline_modifier.cpp.execution b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_14_multiline_modifier.cpp.execution
new file mode 100644
index 000000000..9a12081ac
--- /dev/null
+++ b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_14_multiline_modifier.cpp.execution
@@ -0,0 +1,533 @@
+Running tests_14_multiline_modifier:
+01_y: OK regex: \Z parsed_regex: \Z str: a
+b
+ result_expr: $-[0] expected_results 3
+02_y: OK regex: \z parsed_regex: \z str: a
+b
+ result_expr: $-[0] expected_results 4
+03_y: OK regex: $ parsed_regex: $ str: a
+b
+ result_expr: $-[0] expected_results 3
+04_y: OK regex: \Z parsed_regex: \Z str: b
+a
+ result_expr: $-[0] expected_results 3
+05_y: OK regex: \z parsed_regex: \z str: b
+a
+ result_expr: $-[0] expected_results 4
+06_y: OK regex: $ parsed_regex: $ str: b
+a
+ result_expr: $-[0] expected_results 3
+07_y: OK regex: \Z parsed_regex: \Z str: b
+a result_expr: $-[0] expected_results 3
+08_y: OK regex: \z parsed_regex: \z str: b
+a result_expr: $-[0] expected_results 3
+09_y: OK regex: $ parsed_regex: $ str: b
+a result_expr: $-[0] expected_results 3
+10_y: OK regex: '\Z'm parsed_regex: '\Z'm str: a
+b
+ result_expr: $-[0] expected_results 3
+11_y: OK regex: '\z'm parsed_regex: '\z'm str: a
+b
+ result_expr: $-[0] expected_results 4
+12_y: OK regex: '$'m parsed_regex: '$'m str: a
+b
+ result_expr: $-[0] expected_results 1
+13_y: OK regex: '\Z'm parsed_regex: '\Z'm str: b
+a
+ result_expr: $-[0] expected_results 3
+14_y: OK regex: '\z'm parsed_regex: '\z'm str: b
+a
+ result_expr: $-[0] expected_results 4
+15_y: OK regex: '$'m parsed_regex: '$'m str: b
+a
+ result_expr: $-[0] expected_results 1
+16_y: OK regex: '\Z'm parsed_regex: '\Z'm str: b
+a result_expr: $-[0] expected_results 3
+17_y: OK regex: '\z'm parsed_regex: '\z'm str: b
+a result_expr: $-[0] expected_results 3
+18_y: OK regex: '$'m parsed_regex: '$'m str: b
+a result_expr: $-[0] expected_results 1
+19_n: OK regex: a\Z parsed_regex: a\Z str: a
+b
+ result_expr: - expected_results -
+20_n: OK regex: a\z parsed_regex: a\z str: a
+b
+ result_expr: - expected_results -
+21_n: OK regex: a$ parsed_regex: a$ str: a
+b
+ result_expr: - expected_results -
+22_y: OK regex: a\Z parsed_regex: a\Z str: b
+a
+ result_expr: $-[0] expected_results 2
+23_n: OK regex: a\z parsed_regex: a\z str: b
+a
+ result_expr: - expected_results -
+24_y: OK regex: a$ parsed_regex: a$ str: b
+a
+ result_expr: $-[0] expected_results 2
+25_y: OK regex: a\Z parsed_regex: a\Z str: b
+a result_expr: $-[0] expected_results 2
+26_y: OK regex: a\z parsed_regex: a\z str: b
+a result_expr: $-[0] expected_results 2
+27_y: OK regex: a$ parsed_regex: a$ str: b
+a result_expr: $-[0] expected_results 2
+28_n: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: a
+b
+ result_expr: - expected_results -
+29_n: OK regex: 'a\z'm parsed_regex: 'a\z'm str: a
+b
+ result_expr: - expected_results -
+30_y: OK regex: 'a$'m parsed_regex: 'a$'m str: a
+b
+ result_expr: $-[0] expected_results 0
+31_y: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: b
+a
+ result_expr: $-[0] expected_results 2
+32_n: OK regex: 'a\z'm parsed_regex: 'a\z'm str: b
+a
+ result_expr: - expected_results -
+33_y: OK regex: 'a$'m parsed_regex: 'a$'m str: b
+a
+ result_expr: $-[0] expected_results 2
+34_y: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: b
+a result_expr: $-[0] expected_results 2
+35_y: OK regex: 'a\z'm parsed_regex: 'a\z'm str: b
+a result_expr: $-[0] expected_results 2
+36_y: OK regex: 'a$'m parsed_regex: 'a$'m str: b
+a result_expr: $-[0] expected_results 2
+37_n: OK regex: aa\Z parsed_regex: aa\Z str: aa
+b
+ result_expr: - expected_results -
+38_n: OK regex: aa\z parsed_regex: aa\z str: aa
+b
+ result_expr: - expected_results -
+39_n: OK regex: aa$ parsed_regex: aa$ str: aa
+b
+ result_expr: - expected_results -
+40_y: OK regex: aa\Z parsed_regex: aa\Z str: b
+aa
+ result_expr: $-[0] expected_results 2
+41_n: OK regex: aa\z parsed_regex: aa\z str: b
+aa
+ result_expr: - expected_results -
+42_y: OK regex: aa$ parsed_regex: aa$ str: b
+aa
+ result_expr: $-[0] expected_results 2
+43_y: OK regex: aa\Z parsed_regex: aa\Z str: b
+aa result_expr: $-[0] expected_results 2
+44_y: OK regex: aa\z parsed_regex: aa\z str: b
+aa result_expr: $-[0] expected_results 2
+45_y: OK regex: aa$ parsed_regex: aa$ str: b
+aa result_expr: $-[0] expected_results 2
+46_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: aa
+b
+ result_expr: - expected_results -
+47_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: aa
+b
+ result_expr: - expected_results -
+48_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: aa
+b
+ result_expr: $-[0] expected_results 0
+49_y: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+aa
+ result_expr: $-[0] expected_results 2
+50_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+aa
+ result_expr: - expected_results -
+51_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+aa
+ result_expr: $-[0] expected_results 2
+52_y: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+aa result_expr: $-[0] expected_results 2
+53_y: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+aa result_expr: $-[0] expected_results 2
+54_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+aa result_expr: $-[0] expected_results 2
+55_n: OK regex: aa\Z parsed_regex: aa\Z str: ac
+b
+ result_expr: - expected_results -
+56_n: OK regex: aa\z parsed_regex: aa\z str: ac
+b
+ result_expr: - expected_results -
+57_n: OK regex: aa$ parsed_regex: aa$ str: ac
+b
+ result_expr: - expected_results -
+58_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ac
+ result_expr: - expected_results -
+59_n: OK regex: aa\z parsed_regex: aa\z str: b
+ac
+ result_expr: - expected_results -
+60_n: OK regex: aa$ parsed_regex: aa$ str: b
+ac
+ result_expr: - expected_results -
+61_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ac result_expr: - expected_results -
+62_n: OK regex: aa\z parsed_regex: aa\z str: b
+ac result_expr: - expected_results -
+63_n: OK regex: aa$ parsed_regex: aa$ str: b
+ac result_expr: - expected_results -
+64_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: ac
+b
+ result_expr: - expected_results -
+65_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: ac
+b
+ result_expr: - expected_results -
+66_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: ac
+b
+ result_expr: - expected_results -
+67_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ac
+ result_expr: - expected_results -
+68_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ac
+ result_expr: - expected_results -
+69_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ac
+ result_expr: - expected_results -
+70_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ac result_expr: - expected_results -
+71_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ac result_expr: - expected_results -
+72_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ac result_expr: - expected_results -
+73_n: OK regex: aa\Z parsed_regex: aa\Z str: ca
+b
+ result_expr: - expected_results -
+74_n: OK regex: aa\z parsed_regex: aa\z str: ca
+b
+ result_expr: - expected_results -
+75_n: OK regex: aa$ parsed_regex: aa$ str: ca
+b
+ result_expr: - expected_results -
+76_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ca
+ result_expr: - expected_results -
+77_n: OK regex: aa\z parsed_regex: aa\z str: b
+ca
+ result_expr: - expected_results -
+78_n: OK regex: aa$ parsed_regex: aa$ str: b
+ca
+ result_expr: - expected_results -
+79_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ca result_expr: - expected_results -
+80_n: OK regex: aa\z parsed_regex: aa\z str: b
+ca result_expr: - expected_results -
+81_n: OK regex: aa$ parsed_regex: aa$ str: b
+ca result_expr: - expected_results -
+82_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: ca
+b
+ result_expr: - expected_results -
+83_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: ca
+b
+ result_expr: - expected_results -
+84_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: ca
+b
+ result_expr: - expected_results -
+85_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ca
+ result_expr: - expected_results -
+86_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ca
+ result_expr: - expected_results -
+87_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ca
+ result_expr: - expected_results -
+88_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ca result_expr: - expected_results -
+89_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ca result_expr: - expected_results -
+90_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ca result_expr: - expected_results -
+91_n: OK regex: ab\Z parsed_regex: ab\Z str: ab
+b
+ result_expr: - expected_results -
+92_n: OK regex: ab\z parsed_regex: ab\z str: ab
+b
+ result_expr: - expected_results -
+93_n: OK regex: ab$ parsed_regex: ab$ str: ab
+b
+ result_expr: - expected_results -
+94_y: OK regex: ab\Z parsed_regex: ab\Z str: b
+ab
+ result_expr: $-[0] expected_results 2
+95_n: OK regex: ab\z parsed_regex: ab\z str: b
+ab
+ result_expr: - expected_results -
+96_y: OK regex: ab$ parsed_regex: ab$ str: b
+ab
+ result_expr: $-[0] expected_results 2
+97_y: OK regex: ab\Z parsed_regex: ab\Z str: b
+ab result_expr: $-[0] expected_results 2
+98_y: OK regex: ab\z parsed_regex: ab\z str: b
+ab result_expr: $-[0] expected_results 2
+99_y: OK regex: ab$ parsed_regex: ab$ str: b
+ab result_expr: $-[0] expected_results 2
+100_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ab
+b
+ result_expr: - expected_results -
+101_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ab
+b
+ result_expr: - expected_results -
+102_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ab
+b
+ result_expr: $-[0] expected_results 0
+103_y: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ab
+ result_expr: $-[0] expected_results 2
+104_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ab
+ result_expr: - expected_results -
+105_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ab
+ result_expr: $-[0] expected_results 2
+106_y: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ab result_expr: $-[0] expected_results 2
+107_y: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ab result_expr: $-[0] expected_results 2
+108_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ab result_expr: $-[0] expected_results 2
+109_n: OK regex: ab\Z parsed_regex: ab\Z str: ac
+b
+ result_expr: - expected_results -
+110_n: OK regex: ab\z parsed_regex: ab\z str: ac
+b
+ result_expr: - expected_results -
+111_n: OK regex: ab$ parsed_regex: ab$ str: ac
+b
+ result_expr: - expected_results -
+112_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ac
+ result_expr: - expected_results -
+113_n: OK regex: ab\z parsed_regex: ab\z str: b
+ac
+ result_expr: - expected_results -
+114_n: OK regex: ab$ parsed_regex: ab$ str: b
+ac
+ result_expr: - expected_results -
+115_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ac result_expr: - expected_results -
+116_n: OK regex: ab\z parsed_regex: ab\z str: b
+ac result_expr: - expected_results -
+117_n: OK regex: ab$ parsed_regex: ab$ str: b
+ac result_expr: - expected_results -
+118_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ac
+b
+ result_expr: - expected_results -
+119_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ac
+b
+ result_expr: - expected_results -
+120_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ac
+b
+ result_expr: - expected_results -
+121_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ac
+ result_expr: - expected_results -
+122_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ac
+ result_expr: - expected_results -
+123_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ac
+ result_expr: - expected_results -
+124_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ac result_expr: - expected_results -
+125_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ac result_expr: - expected_results -
+126_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ac result_expr: - expected_results -
+127_n: OK regex: ab\Z parsed_regex: ab\Z str: ca
+b
+ result_expr: - expected_results -
+128_n: OK regex: ab\z parsed_regex: ab\z str: ca
+b
+ result_expr: - expected_results -
+129_n: OK regex: ab$ parsed_regex: ab$ str: ca
+b
+ result_expr: - expected_results -
+130_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ca
+ result_expr: - expected_results -
+131_n: OK regex: ab\z parsed_regex: ab\z str: b
+ca
+ result_expr: - expected_results -
+132_n: OK regex: ab$ parsed_regex: ab$ str: b
+ca
+ result_expr: - expected_results -
+133_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ca result_expr: - expected_results -
+134_n: OK regex: ab\z parsed_regex: ab\z str: b
+ca result_expr: - expected_results -
+135_n: OK regex: ab$ parsed_regex: ab$ str: b
+ca result_expr: - expected_results -
+136_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ca
+b
+ result_expr: - expected_results -
+137_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ca
+b
+ result_expr: - expected_results -
+138_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ca
+b
+ result_expr: - expected_results -
+139_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ca
+ result_expr: - expected_results -
+140_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ca
+ result_expr: - expected_results -
+141_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ca
+ result_expr: - expected_results -
+142_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ca result_expr: - expected_results -
+143_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ca result_expr: - expected_results -
+144_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ca result_expr: - expected_results -
+145_n: OK regex: abb\Z parsed_regex: abb\Z str: abb
+b
+ result_expr: - expected_results -
+146_n: OK regex: abb\z parsed_regex: abb\z str: abb
+b
+ result_expr: - expected_results -
+147_n: OK regex: abb$ parsed_regex: abb$ str: abb
+b
+ result_expr: - expected_results -
+148_y: OK regex: abb\Z parsed_regex: abb\Z str: b
+abb
+ result_expr: $-[0] expected_results 2
+149_n: OK regex: abb\z parsed_regex: abb\z str: b
+abb
+ result_expr: - expected_results -
+150_y: OK regex: abb$ parsed_regex: abb$ str: b
+abb
+ result_expr: $-[0] expected_results 2
+151_y: OK regex: abb\Z parsed_regex: abb\Z str: b
+abb result_expr: $-[0] expected_results 2
+152_y: OK regex: abb\z parsed_regex: abb\z str: b
+abb result_expr: $-[0] expected_results 2
+153_y: OK regex: abb$ parsed_regex: abb$ str: b
+abb result_expr: $-[0] expected_results 2
+154_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: abb
+b
+ result_expr: - expected_results -
+155_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: abb
+b
+ result_expr: - expected_results -
+156_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: abb
+b
+ result_expr: $-[0] expected_results 0
+157_y: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+abb
+ result_expr: $-[0] expected_results 2
+158_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+abb
+ result_expr: - expected_results -
+159_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+abb
+ result_expr: $-[0] expected_results 2
+160_y: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+abb result_expr: $-[0] expected_results 2
+161_y: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+abb result_expr: $-[0] expected_results 2
+162_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+abb result_expr: $-[0] expected_results 2
+163_n: OK regex: abb\Z parsed_regex: abb\Z str: ac
+b
+ result_expr: - expected_results -
+164_n: OK regex: abb\z parsed_regex: abb\z str: ac
+b
+ result_expr: - expected_results -
+165_n: OK regex: abb$ parsed_regex: abb$ str: ac
+b
+ result_expr: - expected_results -
+166_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ac
+ result_expr: - expected_results -
+167_n: OK regex: abb\z parsed_regex: abb\z str: b
+ac
+ result_expr: - expected_results -
+168_n: OK regex: abb$ parsed_regex: abb$ str: b
+ac
+ result_expr: - expected_results -
+169_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ac result_expr: - expected_results -
+170_n: OK regex: abb\z parsed_regex: abb\z str: b
+ac result_expr: - expected_results -
+171_n: OK regex: abb$ parsed_regex: abb$ str: b
+ac result_expr: - expected_results -
+172_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: ac
+b
+ result_expr: - expected_results -
+173_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: ac
+b
+ result_expr: - expected_results -
+174_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: ac
+b
+ result_expr: - expected_results -
+175_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ac
+ result_expr: - expected_results -
+176_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ac
+ result_expr: - expected_results -
+177_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ac
+ result_expr: - expected_results -
+178_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ac result_expr: - expected_results -
+179_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ac result_expr: - expected_results -
+180_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ac result_expr: - expected_results -
+181_n: OK regex: abb\Z parsed_regex: abb\Z str: ca
+b
+ result_expr: - expected_results -
+182_n: OK regex: abb\z parsed_regex: abb\z str: ca
+b
+ result_expr: - expected_results -
+183_n: OK regex: abb$ parsed_regex: abb$ str: ca
+b
+ result_expr: - expected_results -
+184_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ca
+ result_expr: - expected_results -
+185_n: OK regex: abb\z parsed_regex: abb\z str: b
+ca
+ result_expr: - expected_results -
+186_n: OK regex: abb$ parsed_regex: abb$ str: b
+ca
+ result_expr: - expected_results -
+187_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ca result_expr: - expected_results -
+188_n: OK regex: abb\z parsed_regex: abb\z str: b
+ca result_expr: - expected_results -
+189_n: OK regex: abb$ parsed_regex: abb$ str: b
+ca result_expr: - expected_results -
+190_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: ca
+b
+ result_expr: - expected_results -
+191_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: ca
+b
+ result_expr: - expected_results -
+192_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: ca
+b
+ result_expr: - expected_results -
+193_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ca
+ result_expr: - expected_results -
+194_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ca
+ result_expr: - expected_results -
+195_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ca
+ result_expr: - expected_results -
+196_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ca result_expr: - expected_results -
+197_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ca result_expr: - expected_results -
+198_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ca result_expr: - expected_results -
+199_y: OK regex: '\Aa$'m parsed_regex: '\Aa$'m str: a
+
+ result_expr: $& expected_results a
+
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_14_multiline_modifier.cpp.output b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_14_multiline_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_15_group_modifiers.cpp.execution b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_15_group_modifiers.cpp.execution
new file mode 100644
index 000000000..de92abc48
--- /dev/null
+++ b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_15_group_modifiers.cpp.execution
@@ -0,0 +1,87 @@
+Running tests_15_group_modifiers:
+01_y: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: ab result_expr: $& expected_results ab
+02_y: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: ab result_expr: $&:$1 expected_results ab:a
+03_y: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: Ab result_expr: $& expected_results Ab
+04_y: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: Ab result_expr: $&:$1 expected_results Ab:A
+05_n: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: aB result_expr: - expected_results -
+06_n: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: aB result_expr: - expected_results -
+07_y: OK regex: (?i:a)b parsed_regex: (?i:a)b str: ab result_expr: $& expected_results ab
+08_y: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: ab result_expr: $&:$1 expected_results ab:a
+09_y: OK regex: (?i:a)b parsed_regex: (?i:a)b str: Ab result_expr: $& expected_results Ab
+10_y: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: Ab result_expr: $&:$1 expected_results Ab:A
+11_n: OK regex: (?i:a)b parsed_regex: (?i:a)b str: aB result_expr: - expected_results -
+12_n: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: aB result_expr: - expected_results -
+13_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: ab result_expr: $& expected_results ab
+14_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: ab result_expr: $&:$1 expected_results ab:a
+15_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: aB result_expr: $& expected_results aB
+16_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: aB result_expr: $&:$1 expected_results aB:a
+17_n: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: Ab result_expr: - expected_results -
+18_n: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: Ab result_expr: - expected_results -
+19_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: aB result_expr: $& expected_results aB
+20_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: aB result_expr: $1 expected_results a
+21_n: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: AB result_expr: - expected_results -
+22_n: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: AB result_expr: - expected_results -
+23_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: ab result_expr: $& expected_results ab
+24_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: ab result_expr: $&:$1 expected_results ab:a
+25_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: aB result_expr: $& expected_results aB
+26_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: aB result_expr: $&:$1 expected_results aB:a
+27_n: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: Ab result_expr: - expected_results -
+28_n: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: Ab result_expr: - expected_results -
+29_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: aB result_expr: $& expected_results aB
+30_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: aB result_expr: $1 expected_results a
+31_n: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: AB result_expr: - expected_results -
+32_n: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: AB result_expr: - expected_results -
+33_n: OK regex: '((?-i:a.))b'i parsed_regex: '((?-i:a.))b'i str: a
+B result_expr: - expected_results -
+34_n: OK regex: '((?-i:a\N))b'i parsed_regex: '((?-i:a\N))b'i str: a
+B result_expr: - expected_results -
+35_y: OK regex: '((?s-i:a.))b'i parsed_regex: '((?s-i:a.))b'i str: a
+B result_expr: $1 expected_results a
+
+36_n: OK regex: '((?s-i:a\N))b'i parsed_regex: '((?s-i:a\N))b'i str: a
+B result_expr: - expected_results -
+37_n: OK regex: '((?s-i:a.))b'i parsed_regex: '((?s-i:a.))b'i str: B
+B result_expr: - expected_results -
+38_n: OK regex: '((?s-i:a\N))b'i parsed_regex: '((?s-i:a\N))b'i str: B
+B result_expr: - expected_results -
+39_y: OK regex: (?i:.[b].) parsed_regex: (?i:.[b].) str: abd result_expr: $& expected_results abd
+40_y: OK regex: (?i:\N[b]\N) parsed_regex: (?i:\N[b]\N) str: abd result_expr: $& expected_results abd
+41_n: OK regex: ^(?:a?b?)*$ parsed_regex: ^(?:a?b?)*$ str: a-- result_expr: - expected_results -
+42_y: OK regex: ((?s)^a(.))((?m)^b$) parsed_regex: ((?s)^a(.))((?m)^b$) str: a
+b
+c
+ result_expr: $1;$2;$3 expected_results a
+;
+;b
+43_y: OK regex: ((?m)^b$) parsed_regex: ((?m)^b$) str: a
+b
+c
+ result_expr: $1 expected_results b
+44_y: OK regex: (?m)^b parsed_regex: (?m)^b str: a
+b
+ result_expr: $& expected_results b
+45_y: OK regex: (?m)^(b) parsed_regex: (?m)^(b) str: a
+b
+ result_expr: $1 expected_results b
+46_y: OK regex: ((?m)^b) parsed_regex: ((?m)^b) str: a
+b
+ result_expr: $1 expected_results b
+47_y: OK regex: \n((?m)^b) parsed_regex: \n((?m)^b) str: a
+b
+ result_expr: $1 expected_results b
+48_n: OK regex: ^b parsed_regex: ^b str: a
+b
+c
+ result_expr: - expected_results -
+49_n: OK regex: ()^b parsed_regex: ()^b str: a
+b
+c
+ result_expr: - expected_results -
+50_y: OK regex: ((?m)^b) parsed_regex: ((?m)^b) str: a
+b
+c
+ result_expr: $1 expected_results b
+51_y: OK Warning: Parsed regex does not match. regex: '(foo)'n parsed_regex: '(?:foo)'n str: foobar result_expr: $&-$1 expected_results foo-
+52_y: OK Warning: Parsed regex does not match. regex: '(?-n)(foo)(?n)(bar)'n parsed_regex: '(?-n)(foo)(?n)(?:bar)'n str: foobar result_expr: $&-$1-$2 expected_results foobar-foo-
+53_y: OK Warning: Parsed regex does not match. regex: '(?-n:(foo)(?n:(bar)))'n parsed_regex: '(?-n:(foo)(?n:(?:bar)))'n str: foobar result_expr: $&-$1-$2 expected_results foobar-foo-
+
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_15_group_modifiers.cpp.output b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_15_group_modifiers.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_16_perl_syntax_modifier.cpp.execution b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_16_perl_syntax_modifier.cpp.execution
new file mode 100644
index 000000000..761720007
--- /dev/null
+++ b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_16_perl_syntax_modifier.cpp.execution
@@ -0,0 +1,35 @@
+Running tests_16_perl_syntax_modifier:
+01_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $& expected_results a
+02_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $-[0] expected_results 0
+03_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $+[0] expected_results 1
+04_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $& expected_results abbb
+05_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $-[0] expected_results 0
+06_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $+[0] expected_results 4
+07_y: OK Warning: Parsed regex does not match. regex: /a\N c/x parsed_regex: /a\Nc/x str: abc result_expr: $& expected_results abc
+08_y: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzc result_expr: $& expected_results axyzc
+09_n: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzd result_expr: - expected_results -
+10_yS: OK regex: /[a b]/x parsed_regex: /[a b]/x str:   result_expr: $& expected_results  
+11_n: OK regex: /[a b]/xx parsed_regex: /[a b]/xx str:   result_expr: - expected_results -
+12_y: OK regex: /[a\ b]/xx parsed_regex: /[a\ b]/xx str:   result_expr: $& expected_results  
+13_n: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: a result_expr: - expected_results -
+14_n: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: b result_expr: - expected_results -
+15_y: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: A result_expr: $& expected_results A
+16_yS: OK regex: /(?x:[a b])/xx parsed_regex: /(?x:[a b])/xx str:   result_expr: $& expected_results  
+17_n: OK regex: /(?xx:[a b])/x parsed_regex: /(?xx:[a b])/x str:   result_expr: - expected_results -
+18_yS: OK regex: /(?x)[a b]/xx parsed_regex: /(?x)[a b]/xx str:   result_expr: $& expected_results  
+19_n: OK regex: /(?xx)[a b]/x parsed_regex: /(?xx)[a b]/x str:   result_expr: - expected_results -
+20_yS: OK regex: /(?-x:[a b])/xx parsed_regex: /(?-x:[a b])/xx str:   result_expr: $& expected_results  
+21_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $& expected_results a
+22_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $-[0] expected_results 0
+23_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $+[0] expected_results 1
+24_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $& expected_results abbb
+25_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $-[0] expected_results 0
+26_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $+[0] expected_results 4
+27_y: OK Warning: Parsed regex does not match. regex: /a\N c/x parsed_regex: /a\Nc/x str: abc result_expr: $& expected_results abc
+28_y: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzc result_expr: $& expected_results axyzc
+29_n: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzd result_expr: - expected_results -
+30_y: OK regex: /[#]/ parsed_regex: /[#]/ str: a#b result_expr: $& expected_results #
+31_y: OK regex: /[#]b/ parsed_regex: /[#]b/ str: a#b result_expr: $& expected_results #b
+32_y: OK regex: /[#]/x parsed_regex: /[#]/x str: a#b result_expr: $& expected_results #
+33_y: OK regex: /[#]b/x parsed_regex: /[#]b/x str: a#b result_expr: $& expected_results #b
+
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_16_perl_syntax_modifier.cpp.output b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_16_perl_syntax_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_17_comments.cpp.execution b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_17_comments.cpp.execution
new file mode 100644
index 000000000..17c9a5d55
--- /dev/null
+++ b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_17_comments.cpp.execution
@@ -0,0 +1,5 @@
+Running tests_17_comments:
+01_y: OK regex: ^a(?#xxx){3}c parsed_regex: ^a(?#xxx){3}c str: aaac result_expr: $& expected_results aaac
+02_y: OK Warning: Parsed regex does not match. regex: '^a (?#xxx) (?#yyy) {3}c'x parsed_regex: '^a(?#xxx)(?#yyy){3}c'x str: aaac result_expr: $& expected_results aaac
+03_y: OK Warning: Parsed regex does not match. regex: 'foo # Match foo'x parsed_regex: 'foo'x str: foobar result_expr: $& expected_results foo
+
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_17_comments.cpp.output b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_17_comments.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_18_branch_reset.cpp.execution b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_18_branch_reset.cpp.execution
new file mode 100644
index 000000000..1d088ce31
--- /dev/null
+++ b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_18_branch_reset.cpp.execution
@@ -0,0 +1,17 @@
+Running tests_18_branch_reset:
+01_y: OK regex: (?|(a)) parsed_regex: (?|(a)) str: a result_expr: $1-$+ expected_results a-a
+02_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: d!o!da result_expr: $1-$2-$3 expected_results !o!-o-a
+03_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: aabc result_expr: $1-$2-$3 expected_results a--c
+04_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: ixyjp result_expr: $1-$2-$3 expected_results x-y-p
+05_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: a result_expr: $1 expected_results a
+06_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: b result_expr: $1 expected_results b
+07_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: c result_expr: $1 expected_results c
+08_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: d result_expr: $1 expected_results d
+09_y: OK regex: (.)(?|(.)(.)x|(.)d)(.) parsed_regex: (.)(?|(.)(.)x|(.)d)(.) str: abcde result_expr: $1-$2-$3-$4-$5- expected_results b-c--e--
+10_y: OK regex: (\N)(?|(\N)(\N)x|(\N)d)(\N) parsed_regex: (\N)(?|(\N)(\N)x|(\N)d)(\N) str: abcde result_expr: $1-$2-$3-$4-$5- expected_results b-c--e--
+11_yM: OK regex: (?|(?<foo>x)) parsed_regex: (?|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+12_yM: OK regex: (?|(?<foo>x)|(?<bar>y)) parsed_regex: (?|(?<foo>x)|(?<bar>y)) str: x result_expr: $+{foo} expected_results x
+13_yM: OK regex: (?|(?<bar>y)|(?<foo>x)) parsed_regex: (?|(?<bar>y)|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+14_yM: OK regex: (?<bar>)(?|(?<foo>x)) parsed_regex: (?<bar>)(?|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+15_y: OK regex: (?|(b)|()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(a)) parsed_regex: (?|(b)|()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(a)) str: a result_expr: $& expected_results a
+
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_18_branch_reset.cpp.output b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_18_branch_reset.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_19_lookahead.cpp.execution b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_19_lookahead.cpp.execution
new file mode 100644
index 000000000..7b34914b1
--- /dev/null
+++ b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_19_lookahead.cpp.execution
@@ -0,0 +1,77 @@
+Running tests_19_lookahead:
+01_y: OK regex: a(?!b). parsed_regex: a(?!b). str: abad result_expr: $& expected_results ad
+02_y: OK regex: (?=)a parsed_regex: (?=)a str: a result_expr: $& expected_results a
+03_y: OK regex: a(?=d). parsed_regex: a(?=d). str: abad result_expr: $& expected_results ad
+04_y: OK regex: a(?=c|d). parsed_regex: a(?=c|d). str: abad result_expr: $& expected_results ad
+05_y: OK regex: ^(?:b|a(?=(.)))*\1 parsed_regex: ^(?:b|a(?=(.)))*\1 str: abc result_expr: $& expected_results ab
+06_y: OK regex: (?=(a+?))(\1ab) parsed_regex: (?=(a+?))(\1ab) str: aaab result_expr: $2 expected_results aab
+07_n: OK regex: ^(?=(a+?))\1ab parsed_regex: ^(?=(a+?))\1ab str: aaab result_expr: - expected_results -
+08_y: OK regex: (?=(a+?))(\1ab) parsed_regex: (?=(a+?))(\1ab) str: aaab result_expr: $2 expected_results aab
+09_n: OK regex: ^(?=(a+?))\1ab parsed_regex: ^(?=(a+?))\1ab str: aaab result_expr: - expected_results -
+10_y: OK regex: (.*)(?=c) parsed_regex: (.*)(?=c) str: abcd result_expr: $1 expected_results ab
+11_yB: OK regex: (.*)(?=c)c parsed_regex: (.*)(?=c)c str: abcd result_expr: $1 expected_results ab
+12_y: OK regex: (.*)(?=b|c) parsed_regex: (.*)(?=b|c) str: abcd result_expr: $1 expected_results ab
+13_y: OK regex: (.*)(?=b|c)c parsed_regex: (.*)(?=b|c)c str: abcd result_expr: $1 expected_results ab
+14_y: OK regex: (.*)(?=c|b) parsed_regex: (.*)(?=c|b) str: abcd result_expr: $1 expected_results ab
+15_y: OK regex: (.*)(?=c|b)c parsed_regex: (.*)(?=c|b)c str: abcd result_expr: $1 expected_results ab
+16_y: OK regex: (.*)(?=[bc]) parsed_regex: (.*)(?=[bc]) str: abcd result_expr: $1 expected_results ab
+17_yB: OK regex: (.*)(?=[bc])c parsed_regex: (.*)(?=[bc])c str: abcd result_expr: $1 expected_results ab
+18_y: OK regex: (.*?)(?=c) parsed_regex: (.*?)(?=c) str: abcd result_expr: $1 expected_results ab
+19_yB: OK regex: (.*?)(?=c)c parsed_regex: (.*?)(?=c)c str: abcd result_expr: $1 expected_results ab
+20_y: OK regex: (.*?)(?=b|c) parsed_regex: (.*?)(?=b|c) str: abcd result_expr: $1 expected_results a
+21_y: OK regex: (.*?)(?=b|c)c parsed_regex: (.*?)(?=b|c)c str: abcd result_expr: $1 expected_results ab
+22_y: OK regex: (.*?)(?=c|b) parsed_regex: (.*?)(?=c|b) str: abcd result_expr: $1 expected_results a
+23_y: OK regex: (.*?)(?=c|b)c parsed_regex: (.*?)(?=c|b)c str: abcd result_expr: $1 expected_results ab
+24_y: OK regex: (.*?)(?=[bc]) parsed_regex: (.*?)(?=[bc]) str: abcd result_expr: $1 expected_results a
+25_yB: OK regex: (.*?)(?=[bc])c parsed_regex: (.*?)(?=[bc])c str: abcd result_expr: $1 expected_results ab
+26_y: OK regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) parsed_regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) str: aaaaaaaa result_expr: $1 expected_results aaaaaaa
+27_y: OK regex: a(?!b(?!c))(..) parsed_regex: a(?!b(?!c))(..) str: abababc result_expr: $1 expected_results bc
+28_y: OK regex: a(?!b(?=a))(..) parsed_regex: a(?!b(?=a))(..) str: abababc result_expr: $1 expected_results bc
+37_y: OK regex: X(\w+)(?=\s)|X(\w+) parsed_regex: X(\w+)(?=\s)|X(\w+) str: Xab result_expr: [$1-$2] expected_results [-ab]
+38_y: OK regex: ^a*(?=b)b parsed_regex: ^a*(?=b)b str: ab result_expr: $& expected_results ab
+39_y: OK regex: '(?!\A)x'm parsed_regex: '(?!\A)x'm str: a
+xb
+ result_expr: - expected_results -
+40_n: OK regex: '^(o)(?!.*\1)'i parsed_regex: '^(o)(?!.*\1)'i str: Oo result_expr: - expected_results -
+41_n: OK regex: .*a(?!(b|cd)*e).*f parsed_regex: .*a(?!(b|cd)*e).*f str: ......abef result_expr: - expected_results -
+42_y: OK regex: ^(a*?)(?!(aa|aaaa)*$) parsed_regex: ^(a*?)(?!(aa|aaaa)*$) str: aaaaaaaaaaaaaaaaaaaa result_expr: $1 expected_results a
+43_y: OK regex: (?!)+?|(.{2,4}) parsed_regex: (?!)+?|(.{2,4}) str: abcde result_expr: $1 expected_results abcd
+44_y: OK regex: ^(a*?)(?!(a{6}|a{5})*$) parsed_regex: ^(a*?)(?!(a{6}|a{5})*$) str: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa result_expr: $+[1] expected_results 12
+45_y: OK regex: a(?!b(?!c(?!d(?!e))))...(.) parsed_regex: a(?!b(?!c(?!d(?!e))))...(.) str: abxabcdxabcde result_expr: $1 expected_results e
+46_y: OK regex: X(?!b+(?!(c+)*(?!(c+)*d))).*X parsed_regex: X(?!b+(?!(c+)*(?!(c+)*d))).*X str: aXbbbbbbbcccccccccccccaaaX result_expr: - expected_results -
+47_y: OK regex: ((?s).)c(?!.) parsed_regex: ((?s).)c(?!.) str: a
+b
+c
+ result_expr: $1 expected_results 
+
+48_y: OK regex: ((?s).)c(?!.) parsed_regex: ((?s).)c(?!.) str: a
+b
+c
+ result_expr: $1:$& expected_results 
+:
+c
+49_y: OK regex: ((?s)b.)c(?!.) parsed_regex: ((?s)b.)c(?!.) str: a
+b
+c
+ result_expr: $1 expected_results b
+
+50_y: OK regex: ((?s)b.)c(?!.) parsed_regex: ((?s)b.)c(?!.) str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+51_y: OK regex: ((?s)b.)c(?!\N) parsed_regex: ((?s)b.)c(?!\N) str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+52_y: OK regex: '(b.)c(?!\N)'s parsed_regex: '(b.)c(?!\N)'s str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+53_n: OK regex: a*(?!) parsed_regex: a*(?!) str: aaaab result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-regex_19_lookahead.cpp.output b/regression-tests/test-results/gcc-13-c++2b/pure2-regex_19_lookahead.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_01_char_matcher.cpp.execution b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_01_char_matcher.cpp.execution
new file mode 100644
index 000000000..af124736e
--- /dev/null
+++ b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_01_char_matcher.cpp.execution
@@ -0,0 +1,14 @@
+Running tests_01_char_matcher:
+01_y: OK regex: abc parsed_regex: abc str: abc result_expr: $& expected_results abc
+02_y: OK regex: abc parsed_regex: abc str: abc result_expr: $-[0] expected_results 0
+03_y: OK regex: abc parsed_regex: abc str: abc result_expr: $+[0] expected_results 3
+04_n: OK regex: abc parsed_regex: abc str: xbc result_expr: - expected_results -
+05_n: OK regex: abc parsed_regex: abc str: axc result_expr: - expected_results -
+06_n: OK regex: abc parsed_regex: abc str: abx result_expr: - expected_results -
+07_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $& expected_results abc
+08_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $-[0] expected_results 1
+09_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $+[0] expected_results 4
+10_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $& expected_results abc
+11_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $-[0] expected_results 2
+12_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $+[0] expected_results 5
+
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_01_char_matcher.cpp.output b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_01_char_matcher.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_02_ranges.cpp.execution b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_02_ranges.cpp.execution
new file mode 100644
index 000000000..dc0b36002
--- /dev/null
+++ b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_02_ranges.cpp.execution
@@ -0,0 +1,42 @@
+Running tests_02_ranges:
+01_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $& expected_results abc
+02_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $-[0] expected_results 0
+03_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $+[0] expected_results 3
+04_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $& expected_results abc
+05_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $-[0] expected_results 0
+06_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $+[0] expected_results 3
+07_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $& expected_results abbc
+08_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $-[0] expected_results 0
+09_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $+[0] expected_results 4
+10_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $& expected_results abbbbc
+11_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $-[0] expected_results 0
+12_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $+[0] expected_results 6
+13_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $& expected_results abbbbc
+14_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $-[0] expected_results 0
+15_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $+[0] expected_results 6
+16_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $& expected_results abbc
+17_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $-[0] expected_results 0
+18_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $+[0] expected_results 4
+19_n: OK regex: ab+bc parsed_regex: ab+bc str: abc result_expr: - expected_results -
+20_n: OK regex: ab+bc parsed_regex: ab+bc str: abq result_expr: - expected_results -
+21_n: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abq result_expr: - expected_results -
+22_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $& expected_results abbbbc
+23_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $-[0] expected_results 0
+24_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $+[0] expected_results 6
+25_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $& expected_results abbbbc
+26_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $-[0] expected_results 0
+27_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $+[0] expected_results 6
+28_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $& expected_results abbbbc
+29_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $-[0] expected_results 0
+30_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $+[0] expected_results 6
+31_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $& expected_results abbbbc
+32_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $-[0] expected_results 0
+33_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $+[0] expected_results 6
+34_n: OK regex: ab{4,5}bc parsed_regex: ab{4,5}bc str: abbbbc result_expr: - expected_results -
+35_y: OK regex: ab?bc parsed_regex: ab?bc str: abbc result_expr: $& expected_results abbc
+36_y: OK regex: ab?bc parsed_regex: ab?bc str: abc result_expr: $& expected_results abc
+37_y: OK regex: ab{0,1}bc parsed_regex: ab{0,1}bc str: abc result_expr: $& expected_results abc
+38_n: OK regex: ab?bc parsed_regex: ab?bc str: abbbbc result_expr: - expected_results -
+39_y: OK regex: ab?c parsed_regex: ab?c str: abc result_expr: $& expected_results abc
+40_y: OK regex: ab{0,1}c parsed_regex: ab{0,1}c str: abc result_expr: $& expected_results abc
+
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_02_ranges.cpp.output b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_02_ranges.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_03_wildcard.cpp.execution b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_03_wildcard.cpp.execution
new file mode 100644
index 000000000..f3f0ea9cc
--- /dev/null
+++ b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_03_wildcard.cpp.execution
@@ -0,0 +1,22 @@
+Running tests_03_wildcard:
+01_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $& expected_results a
+02_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $-[0] expected_results 0
+03_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $+[0] expected_results 1
+04_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $& expected_results abbb
+05_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $-[0] expected_results 0
+06_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+07_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $& expected_results a
+08_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $-[0] expected_results 0
+09_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $+[0] expected_results 1
+10_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $& expected_results abbb
+11_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $-[0] expected_results 0
+12_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+13_y: OK Warning: Parsed regex does not match. regex: \N{ 3 , 4 } parsed_regex: \N{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+14_y: OK regex: a.c parsed_regex: a.c str: abc result_expr: $& expected_results abc
+15_y: OK regex: a.c parsed_regex: a.c str: axc result_expr: $& expected_results axc
+16_y: OK regex: a\Nc parsed_regex: a\Nc str: abc result_expr: $& expected_results abc
+17_y: OK regex: a.*c parsed_regex: a.*c str: axyzc result_expr: $& expected_results axyzc
+18_y: OK regex: a\N*c parsed_regex: a\N*c str: axyzc result_expr: $& expected_results axyzc
+19_n: OK regex: a.*c parsed_regex: a.*c str: axyzd result_expr: - expected_results -
+20_n: OK regex: a\N*c parsed_regex: a\N*c str: axyzd result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_03_wildcard.cpp.output b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_03_wildcard.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_04_start_end.cpp.execution b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_04_start_end.cpp.execution
new file mode 100644
index 000000000..6fef36434
--- /dev/null
+++ b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_04_start_end.cpp.execution
@@ -0,0 +1,11 @@
+Running tests_04_start_end:
+01_y: OK regex: ^abc$ parsed_regex: ^abc$ str: abc result_expr: $& expected_results abc
+02_n: OK regex: ^abc$ parsed_regex: ^abc$ str: abcc result_expr: - expected_results -
+03_y: OK regex: ^abc parsed_regex: ^abc str: abcc result_expr: $& expected_results abc
+04_n: OK regex: ^abc$ parsed_regex: ^abc$ str: aabc result_expr: - expected_results -
+05_y: OK regex: abc$ parsed_regex: abc$ str: aabc result_expr: $& expected_results abc
+06_n: OK regex: abc$ parsed_regex: abc$ str: aabcd result_expr: - expected_results -
+07_y: OK regex: ^ parsed_regex: ^ str: abc result_expr: $& expected_results 
+08_y: OK regex: $ parsed_regex: $ str: abc result_expr: $& expected_results 
+09_n: OK regex: $b parsed_regex: $b str: b result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_04_start_end.cpp.output b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_04_start_end.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_05_classes.cpp.execution b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_05_classes.cpp.execution
new file mode 100644
index 000000000..306bf3395
--- /dev/null
+++ b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_05_classes.cpp.execution
@@ -0,0 +1,21 @@
+Running tests_05_classes:
+01_n: OK regex: a[bc]d parsed_regex: a[bc]d str: abc result_expr: - expected_results -
+02_y: OK regex: a[bc]d parsed_regex: a[bc]d str: abd result_expr: $& expected_results abd
+03_y: OK regex: a[b]d parsed_regex: a[b]d str: abd result_expr: $& expected_results abd
+04_y: OK regex: [a][b][d] parsed_regex: [a][b][d] str: abd result_expr: $& expected_results abd
+05_y: OK regex: .[b]. parsed_regex: .[b]. str: abd result_expr: $& expected_results abd
+06_n: OK regex: .[b]. parsed_regex: .[b]. str: aBd result_expr: - expected_results -
+07_n: OK regex: a[b-d]e parsed_regex: a[b-d]e str: abd result_expr: - expected_results -
+08_y: OK regex: a[b-d]e parsed_regex: a[b-d]e str: ace result_expr: $& expected_results ace
+09_y: OK regex: a[b-d] parsed_regex: a[b-d] str: aac result_expr: $& expected_results ac
+10_y: OK regex: a[-b] parsed_regex: a[-b] str: a- result_expr: $& expected_results a-
+11_y: OK regex: a[b-] parsed_regex: a[b-] str: a- result_expr: $& expected_results a-
+12_y: OK regex: a] parsed_regex: a] str: a] result_expr: $& expected_results a]
+13_y: OK regex: a[]]b parsed_regex: a[]]b str: a]b result_expr: $& expected_results a]b
+14_y: OK regex: a[^bc]d parsed_regex: a[^bc]d str: aed result_expr: $& expected_results aed
+15_n: OK regex: a[^bc]d parsed_regex: a[^bc]d str: abd result_expr: - expected_results -
+16_y: OK regex: a[^-b]c parsed_regex: a[^-b]c str: adc result_expr: $& expected_results adc
+17_n: OK regex: a[^-b]c parsed_regex: a[^-b]c str: a-c result_expr: - expected_results -
+18_n: OK regex: a[^]b]c parsed_regex: a[^]b]c str: a]c result_expr: - expected_results -
+19_y: OK regex: a[^]b]c parsed_regex: a[^]b]c str: adc result_expr: $& expected_results adc
+
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_05_classes.cpp.output b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_05_classes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_06_boundaries.cpp.execution b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_06_boundaries.cpp.execution
new file mode 100644
index 000000000..420a4c587
--- /dev/null
+++ b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_06_boundaries.cpp.execution
@@ -0,0 +1,19 @@
+Running tests_06_boundaries:
+01_y: OK regex: \ba\b parsed_regex: \ba\b str: a- result_expr: - expected_results -
+02_y: OK regex: \ba\b parsed_regex: \ba\b str: -a result_expr: - expected_results -
+03_y: OK regex: \ba\b parsed_regex: \ba\b str: -a- result_expr: - expected_results -
+04_n: OK regex: \by\b parsed_regex: \by\b str: xy result_expr: - expected_results -
+05_n: OK regex: \by\b parsed_regex: \by\b str: yz result_expr: - expected_results -
+06_n: OK regex: \by\b parsed_regex: \by\b str: xyz result_expr: - expected_results -
+07_n: OK regex: \Ba\B parsed_regex: \Ba\B str: a- result_expr: - expected_results -
+08_n: OK regex: \Ba\B parsed_regex: \Ba\B str: -a result_expr: - expected_results -
+09_n: OK regex: \Ba\B parsed_regex: \Ba\B str: -a- result_expr: - expected_results -
+10_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: - expected_results -
+11_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: $-[0] expected_results 1
+12_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: $+[0] expected_results 2
+13_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: - expected_results -
+14_y: OK regex: \by\B parsed_regex: \by\B str: yz result_expr: - expected_results -
+15_y: OK regex: \By\B parsed_regex: \By\B str: xyz result_expr: - expected_results -
+16_n: OK regex: \b parsed_regex: \b str:  result_expr: - expected_results -
+17_y: OK regex: \B parsed_regex: \B str:  result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_06_boundaries.cpp.output b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_06_boundaries.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_07_short_classes.cpp.execution b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_07_short_classes.cpp.execution
new file mode 100644
index 000000000..519c05f92
--- /dev/null
+++ b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_07_short_classes.cpp.execution
@@ -0,0 +1,26 @@
+Running tests_07_short_classes:
+01_y: OK regex: \w parsed_regex: \w str: a result_expr: - expected_results -
+02_n: OK regex: \w parsed_regex: \w str: - result_expr: - expected_results -
+03_n: OK regex: \W parsed_regex: \W str: a result_expr: - expected_results -
+04_y: OK regex: \W parsed_regex: \W str: - result_expr: - expected_results -
+05_y: OK regex: a\sb parsed_regex: a\sb str: a b result_expr: - expected_results -
+06_n: OK regex: a\sb parsed_regex: a\sb str: a-b result_expr: - expected_results -
+07_n: OK regex: a\Sb parsed_regex: a\Sb str: a b result_expr: - expected_results -
+08_y: OK regex: a\Sb parsed_regex: a\Sb str: a-b result_expr: - expected_results -
+09_y: OK regex: \d parsed_regex: \d str: 1 result_expr: - expected_results -
+10_n: OK regex: \d parsed_regex: \d str: - result_expr: - expected_results -
+11_n: OK regex: \D parsed_regex: \D str: 1 result_expr: - expected_results -
+12_y: OK regex: \D parsed_regex: \D str: - result_expr: - expected_results -
+13_y: OK regex: [\w] parsed_regex: [\w] str: a result_expr: - expected_results -
+14_n: OK regex: [\w] parsed_regex: [\w] str: - result_expr: - expected_results -
+15_n: OK regex: [\W] parsed_regex: [\W] str: a result_expr: - expected_results -
+16_y: OK regex: [\W] parsed_regex: [\W] str: - result_expr: - expected_results -
+17_y: OK regex: a[\s]b parsed_regex: a[\s]b str: a b result_expr: - expected_results -
+18_n: OK regex: a[\s]b parsed_regex: a[\s]b str: a-b result_expr: - expected_results -
+19_n: OK regex: a[\S]b parsed_regex: a[\S]b str: a b result_expr: - expected_results -
+20_y: OK regex: a[\S]b parsed_regex: a[\S]b str: a-b result_expr: - expected_results -
+21_y: OK regex: [\d] parsed_regex: [\d] str: 1 result_expr: - expected_results -
+22_n: OK regex: [\d] parsed_regex: [\d] str: - result_expr: - expected_results -
+23_n: OK regex: [\D] parsed_regex: [\D] str: 1 result_expr: - expected_results -
+24_y: OK regex: [\D] parsed_regex: [\D] str: - result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_07_short_classes.cpp.output b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_07_short_classes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_08_alternatives.cpp.execution b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_08_alternatives.cpp.execution
new file mode 100644
index 000000000..c12fd2afe
--- /dev/null
+++ b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_08_alternatives.cpp.execution
@@ -0,0 +1,4 @@
+Running tests_08_alternatives:
+01_y: OK regex: ab|cd parsed_regex: ab|cd str: abc result_expr: $& expected_results ab
+02_y: OK regex: ab|cd parsed_regex: ab|cd str: abcd result_expr: $& expected_results ab
+
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_08_alternatives.cpp.output b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_08_alternatives.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_09_groups.cpp.execution b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_09_groups.cpp.execution
new file mode 100644
index 000000000..05df860f9
--- /dev/null
+++ b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_09_groups.cpp.execution
@@ -0,0 +1,13 @@
+Running tests_09_groups:
+01_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $&-$1 expected_results ef-
+02_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $-[0] expected_results 1
+03_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $+[0] expected_results 3
+04_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $-[1] expected_results 1
+05_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $+[1] expected_results 1
+06_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $&-$1-$2 expected_results a-a-a
+07_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $-[0]-$-[1]-$-[2] expected_results 0-0-0
+08_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $+[0]-$+[1]-$+[2] expected_results 1-1-1
+09_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $&-$1-$2 expected_results abc-a-c
+10_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $-[0]-$-[1]-$-[2] expected_results 0-0-2
+11_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $+[0]-$+[1]-$+[2] expected_results 3-1-3
+
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_09_groups.cpp.output b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_09_groups.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_10_escapes.cpp.execution b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_10_escapes.cpp.execution
new file mode 100644
index 000000000..fe6e6efc9
--- /dev/null
+++ b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_10_escapes.cpp.execution
@@ -0,0 +1,39 @@
+Running tests_10_escapes:
+01_y: OK regex: a\(b parsed_regex: a\(b str: a(b result_expr: $&-$1 expected_results a(b-
+02_y: OK regex: a\(*b parsed_regex: a\(*b str: ab result_expr: $& expected_results ab
+03_y: OK regex: a\(*b parsed_regex: a\(*b str: a((b result_expr: $& expected_results a((b
+04_y: OK regex: a\\b parsed_regex: a\\b str: a\b result_expr: $& expected_results a\b
+05_y: OK regex: foo(\h+)bar parsed_regex: foo(\h+)bar str: foo	bar result_expr: $1 expected_results 	
+06_y: OK regex: (\H+)(\h) parsed_regex: (\H+)(\h) str: foo	bar result_expr: $1-$2 expected_results foo-	
+07_y: OK regex: (\h+)(\H) parsed_regex: (\h+)(\H) str: foo	bar result_expr: $1-$2 expected_results 	-b
+08_y: OK regex: foo(\h)bar parsed_regex: foo(\h)bar str: foo	bar result_expr: $1 expected_results 	
+09_y: OK regex: (\H)(\h) parsed_regex: (\H)(\h) str: foo	bar result_expr: $1-$2 expected_results o-	
+10_y: OK regex: (\h)(\H) parsed_regex: (\h)(\H) str: foo	bar result_expr: $1-$2 expected_results 	-b
+11_y: OK regex: foo(\v+)bar parsed_regex: foo(\v+)bar str: foo
+
+
+bar result_expr: $1 expected_results 
+
+
+
+12_y: OK regex: (\V+)(\v) parsed_regex: (\V+)(\v) str: foo
+
+
+bar result_expr: $1-$2 expected_results foo-
+13_y: OK regex: (\v+)(\V) parsed_regex: (\v+)(\V) str: foo
+
+
+bar result_expr: $1-$2 expected_results 
+
+
+-b
+14_y: OK regex: foo(\v)bar parsed_regex: foo(\v)bar str: foo
bar result_expr: $1 expected_results 
+15_y: OK regex: (\V)(\v) parsed_regex: (\V)(\v) str: foo
bar result_expr: $1-$2 expected_results o-
+16_y: OK regex: (\v)(\V) parsed_regex: (\v)(\V) str: foo
bar result_expr: $1-$2 expected_results 
-b
+17_y: OK regex: foo\t\n\r\f\a\ebar parsed_regex: foo\t\n\r\f\a\ebar str: foo	
+
bar result_expr: $& expected_results foo	
+
bar
+18_y: OK regex: foo\Kbar parsed_regex: foo\Kbar str: foobar result_expr: $& expected_results bar
+19_y: OK regex: \x41\x42 parsed_regex: \x41\x42 str: AB result_expr: $& expected_results AB
+20_y: OK regex: \101\o{102} parsed_regex: \101\o{102} str: AB result_expr: $& expected_results AB
+
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_10_escapes.cpp.output b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_10_escapes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_11_group_references.cpp.execution b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_11_group_references.cpp.execution
new file mode 100644
index 000000000..724d0085a
--- /dev/null
+++ b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_11_group_references.cpp.execution
@@ -0,0 +1,26 @@
+Running tests_11_group_references:
+01_y: OK regex: (foo)(\g-2) parsed_regex: (foo)(\g-2) str: foofoo result_expr: $1-$2 expected_results foo-foo
+02_y: OK regex: (foo)(\g-2)(foo)(\g-2) parsed_regex: (foo)(\g-2)(foo)(\g-2) str: foofoofoofoo result_expr: $1-$2-$3-$4 expected_results foo-foo-foo-foo
+03_y: OK regex: (([abc]+) \g-1)(([abc]+) \g{-1}) parsed_regex: (([abc]+) \g-1)(([abc]+) \g{-1}) str: abc abccba cba result_expr: $2-$4 expected_results abc-cba
+04_y: OK regex: (a)(b)(c)\g1\g2\g3 parsed_regex: (a)(b)(c)\g1\g2\g3 str: abcabc result_expr: $1$2$3 expected_results abc
+05_y: OK regex: /(?'n'foo) \g{n}/ parsed_regex: /(?'n'foo) \g{n}/ str: ..foo foo.. result_expr: $1 expected_results foo
+06_y: OK regex: /(?'n'foo) \g{ n }/ parsed_regex: /(?'n'foo) \g{ n }/ str: ..foo foo.. result_expr: $1 expected_results foo
+07_yM: OK regex: /(?'n'foo) \g{n}/ parsed_regex: /(?'n'foo) \g{n}/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+08_y: OK regex: /(?<n>foo) \g{n}/ parsed_regex: /(?<n>foo) \g{n}/ str: ..foo foo.. result_expr: $1 expected_results foo
+09_yM: OK regex: /(?<n>foo) \g{n}/ parsed_regex: /(?<n>foo) \g{n}/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+10_y: OK regex: /(?<as>as) (\w+) \g{as} (\w+)/ parsed_regex: /(?<as>as) (\w+) \g{as} (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+11_y: OK regex: /(?'n'foo) \k<n>/ parsed_regex: /(?'n'foo) \k<n>/ str: ..foo foo.. result_expr: $1 expected_results foo
+12_yM: OK regex: /(?'n'foo) \k<n>/ parsed_regex: /(?'n'foo) \k<n>/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+13_y: OK regex: /(?<n>foo) \k'n'/ parsed_regex: /(?<n>foo) \k'n'/ str: ..foo foo.. result_expr: $1 expected_results foo
+14_yM: OK regex: /(?<n>foo) \k'n'/ parsed_regex: /(?<n>foo) \k'n'/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+15_yM: OK regex: /(?'a1'foo) \k'a1'/ parsed_regex: /(?'a1'foo) \k'a1'/ str: ..foo foo.. result_expr: $+{a1} expected_results foo
+16_yM: OK regex: /(?<a1>foo) \k<a1>/ parsed_regex: /(?<a1>foo) \k<a1>/ str: ..foo foo.. result_expr: $+{a1} expected_results foo
+17_yM: OK regex: /(?'_'foo) \k'_'/ parsed_regex: /(?'_'foo) \k'_'/ str: ..foo foo.. result_expr: $+{_} expected_results foo
+18_yM: OK regex: /(?<_>foo) \k<_>/ parsed_regex: /(?<_>foo) \k<_>/ str: ..foo foo.. result_expr: $+{_} expected_results foo
+19_yM: OK regex: /(?'_0_'foo) \k'_0_'/ parsed_regex: /(?'_0_'foo) \k'_0_'/ str: ..foo foo.. result_expr: $+{_0_} expected_results foo
+20_yM: OK regex: /(?<_0_>foo) \k<_0_>/ parsed_regex: /(?<_0_>foo) \k<_0_>/ str: ..foo foo.. result_expr: $+{_0_} expected_results foo
+21_y: OK regex: /(?<as>as) (\w+) \k<as> (\w+)/ parsed_regex: /(?<as>as) (\w+) \k<as> (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+22_y: OK regex: /(?<as>as) (\w+) \k{as} (\w+)/ parsed_regex: /(?<as>as) (\w+) \k{as} (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+23_y: OK regex: /(?<as>as) (\w+) \k'as' (\w+)/ parsed_regex: /(?<as>as) (\w+) \k'as' (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+24_y: OK regex: /(?<as>as) (\w+) \k{ as } (\w+)/ parsed_regex: /(?<as>as) (\w+) \k{ as } (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_11_group_references.cpp.output b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_11_group_references.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_12_case_insensitive.cpp.execution b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_12_case_insensitive.cpp.execution
new file mode 100644
index 000000000..4939deb24
--- /dev/null
+++ b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_12_case_insensitive.cpp.execution
@@ -0,0 +1,121 @@
+Running tests_12_case_insensitive:
+01_y: OK regex: 'abc'i parsed_regex: 'abc'i str: ABC result_expr: $& expected_results ABC
+02_n: OK regex: 'abc'i parsed_regex: 'abc'i str: XBC result_expr: - expected_results -
+03_n: OK regex: 'abc'i parsed_regex: 'abc'i str: AXC result_expr: - expected_results -
+04_n: OK regex: 'abc'i parsed_regex: 'abc'i str: ABX result_expr: - expected_results -
+05_y: OK regex: 'abc'i parsed_regex: 'abc'i str: XABCY result_expr: $& expected_results ABC
+06_y: OK regex: 'abc'i parsed_regex: 'abc'i str: ABABC result_expr: $& expected_results ABC
+07_y: OK regex: 'ab*c'i parsed_regex: 'ab*c'i str: ABC result_expr: $& expected_results ABC
+08_y: OK regex: 'ab*bc'i parsed_regex: 'ab*bc'i str: ABC result_expr: $& expected_results ABC
+09_y: OK regex: 'ab*bc'i parsed_regex: 'ab*bc'i str: ABBC result_expr: $& expected_results ABBC
+10_y: OK regex: 'ab*?bc'i parsed_regex: 'ab*?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+11_y: OK regex: 'ab{0,}?bc'i parsed_regex: 'ab{0,}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+12_y: OK regex: 'ab+?bc'i parsed_regex: 'ab+?bc'i str: ABBC result_expr: $& expected_results ABBC
+13_n: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABC result_expr: - expected_results -
+14_n: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABQ result_expr: - expected_results -
+15_n: OK regex: 'ab{1,}bc'i parsed_regex: 'ab{1,}bc'i str: ABQ result_expr: - expected_results -
+16_y: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+17_y: OK regex: 'ab{1,}?bc'i parsed_regex: 'ab{1,}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+18_y: OK regex: 'ab{1,3}?bc'i parsed_regex: 'ab{1,3}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+19_y: OK regex: 'ab{3,4}?bc'i parsed_regex: 'ab{3,4}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+20_n: OK regex: 'ab{4,5}?bc'i parsed_regex: 'ab{4,5}?bc'i str: ABBBBC result_expr: - expected_results -
+21_y: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABBC result_expr: $& expected_results ABBC
+22_y: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABC result_expr: $& expected_results ABC
+23_y: OK regex: 'ab{0,1}?bc'i parsed_regex: 'ab{0,1}?bc'i str: ABC result_expr: $& expected_results ABC
+24_n: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABBBBC result_expr: - expected_results -
+25_y: OK regex: 'ab??c'i parsed_regex: 'ab??c'i str: ABC result_expr: $& expected_results ABC
+26_y: OK regex: 'ab{0,1}?c'i parsed_regex: 'ab{0,1}?c'i str: ABC result_expr: $& expected_results ABC
+27_y: OK regex: '^abc$'i parsed_regex: '^abc$'i str: ABC result_expr: $& expected_results ABC
+28_n: OK regex: '^abc$'i parsed_regex: '^abc$'i str: ABCC result_expr: - expected_results -
+29_y: OK regex: '^abc'i parsed_regex: '^abc'i str: ABCC result_expr: $& expected_results ABC
+30_n: OK regex: '^abc$'i parsed_regex: '^abc$'i str: AABC result_expr: - expected_results -
+31_y: OK regex: 'abc$'i parsed_regex: 'abc$'i str: AABC result_expr: $& expected_results ABC
+32_y: OK regex: '^'i parsed_regex: '^'i str: ABC result_expr: $& expected_results 
+33_y: OK regex: '$'i parsed_regex: '$'i str: ABC result_expr: $& expected_results 
+34_y: OK regex: 'a.c'i parsed_regex: 'a.c'i str: ABC result_expr: $& expected_results ABC
+35_y: OK regex: 'a.c'i parsed_regex: 'a.c'i str: AXC result_expr: $& expected_results AXC
+36_y: OK regex: 'a\Nc'i parsed_regex: 'a\Nc'i str: ABC result_expr: $& expected_results ABC
+37_y: OK regex: 'a.*?c'i parsed_regex: 'a.*?c'i str: AXYZC result_expr: $& expected_results AXYZC
+38_n: OK regex: 'a.*c'i parsed_regex: 'a.*c'i str: AXYZD result_expr: - expected_results -
+39_n: OK regex: 'a[bc]d'i parsed_regex: 'a[bc]d'i str: ABC result_expr: - expected_results -
+40_y: OK regex: 'a[bc]d'i parsed_regex: 'a[bc]d'i str: ABD result_expr: $& expected_results ABD
+41_n: OK regex: 'a[b-d]e'i parsed_regex: 'a[b-d]e'i str: ABD result_expr: - expected_results -
+42_y: OK regex: 'a[b-d]e'i parsed_regex: 'a[b-d]e'i str: ACE result_expr: $& expected_results ACE
+43_y: OK regex: 'a[b-d]'i parsed_regex: 'a[b-d]'i str: AAC result_expr: $& expected_results AC
+44_y: OK regex: 'a[-b]'i parsed_regex: 'a[-b]'i str: A- result_expr: $& expected_results A-
+45_y: OK regex: 'a[b-]'i parsed_regex: 'a[b-]'i str: A- result_expr: $& expected_results A-
+46_y: OK regex: 'a]'i parsed_regex: 'a]'i str: A] result_expr: $& expected_results A]
+47_y: OK regex: 'a[]]b'i parsed_regex: 'a[]]b'i str: A]B result_expr: $& expected_results A]B
+48_y: OK regex: 'a[^bc]d'i parsed_regex: 'a[^bc]d'i str: AED result_expr: $& expected_results AED
+49_n: OK regex: 'a[^bc]d'i parsed_regex: 'a[^bc]d'i str: ABD result_expr: - expected_results -
+50_y: OK regex: 'a[^-b]c'i parsed_regex: 'a[^-b]c'i str: ADC result_expr: $& expected_results ADC
+51_n: OK regex: 'a[^-b]c'i parsed_regex: 'a[^-b]c'i str: A-C result_expr: - expected_results -
+52_n: OK regex: 'a[^]b]c'i parsed_regex: 'a[^]b]c'i str: A]C result_expr: - expected_results -
+53_y: OK regex: 'a[^]b]c'i parsed_regex: 'a[^]b]c'i str: ADC result_expr: $& expected_results ADC
+54_y: OK regex: 'ab|cd'i parsed_regex: 'ab|cd'i str: ABC result_expr: $& expected_results AB
+55_y: OK regex: 'ab|cd'i parsed_regex: 'ab|cd'i str: ABCD result_expr: $& expected_results AB
+56_y: OK regex: '()ef'i parsed_regex: '()ef'i str: DEF result_expr: $&-$1 expected_results EF-
+57_n: OK regex: '$b'i parsed_regex: '$b'i str: B result_expr: - expected_results -
+58_y: OK regex: 'a\(b'i parsed_regex: 'a\(b'i str: A(B result_expr: $&-$1 expected_results A(B-
+59_y: OK regex: 'a\(*b'i parsed_regex: 'a\(*b'i str: AB result_expr: $& expected_results AB
+60_y: OK regex: 'a\(*b'i parsed_regex: 'a\(*b'i str: A((B result_expr: $& expected_results A((B
+61_y: OK regex: 'a\\b'i parsed_regex: 'a\\b'i str: A\B result_expr: $& expected_results A\B
+62_y: OK regex: '((a))'i parsed_regex: '((a))'i str: ABC result_expr: $&-$1-$2 expected_results A-A-A
+63_y: OK regex: '(a)b(c)'i parsed_regex: '(a)b(c)'i str: ABC result_expr: $&-$1-$2 expected_results ABC-A-C
+64_y: OK regex: 'a+b+c'i parsed_regex: 'a+b+c'i str: AABBABC result_expr: $& expected_results ABC
+65_y: OK regex: 'a{1,}b{1,}c'i parsed_regex: 'a{1,}b{1,}c'i str: AABBABC result_expr: $& expected_results ABC
+66_y: OK regex: 'a.+?c'i parsed_regex: 'a.+?c'i str: ABCABC result_expr: $& expected_results ABC
+67_y: OK regex: 'a.*?c'i parsed_regex: 'a.*?c'i str: ABCABC result_expr: $& expected_results ABC
+68_y: OK regex: 'a.{0,5}?c'i parsed_regex: 'a.{0,5}?c'i str: ABCABC result_expr: $& expected_results ABC
+69_y: OK regex: '(a+|b)*'i parsed_regex: '(a+|b)*'i str: AB result_expr: $&-$1 expected_results AB-B
+70_y: OK regex: '(a+|b){0,}'i parsed_regex: '(a+|b){0,}'i str: AB result_expr: $&-$1 expected_results AB-B
+71_y: OK regex: '(a+|b)+'i parsed_regex: '(a+|b)+'i str: AB result_expr: $&-$1 expected_results AB-B
+72_y: OK regex: '(a+|b){1,}'i parsed_regex: '(a+|b){1,}'i str: AB result_expr: $&-$1 expected_results AB-B
+73_y: OK regex: '(a+|b)?'i parsed_regex: '(a+|b)?'i str: AB result_expr: $&-$1 expected_results A-A
+74_y: OK regex: '(a+|b){0,1}'i parsed_regex: '(a+|b){0,1}'i str: AB result_expr: $&-$1 expected_results A-A
+75_y: OK regex: '(a+|b){0,1}?'i parsed_regex: '(a+|b){0,1}?'i str: AB result_expr: $&-$1 expected_results -
+76_y: OK regex: '[^ab]*'i parsed_regex: '[^ab]*'i str: CDE result_expr: $& expected_results CDE
+77_n: OK regex: 'abc'i parsed_regex: 'abc'i str:  result_expr: - expected_results -
+78_y: OK regex: 'a*'i parsed_regex: 'a*'i str:  result_expr: $& expected_results 
+79_y: OK regex: '([abc])*d'i parsed_regex: '([abc])*d'i str: ABBBCD result_expr: $&-$1 expected_results ABBBCD-C
+80_y: OK regex: '([abc])*bcd'i parsed_regex: '([abc])*bcd'i str: ABCD result_expr: $&-$1 expected_results ABCD-A
+81_y: OK regex: 'a|b|c|d|e'i parsed_regex: 'a|b|c|d|e'i str: E result_expr: $& expected_results E
+82_y: OK regex: '(a|b|c|d|e)f'i parsed_regex: '(a|b|c|d|e)f'i str: EF result_expr: $&-$1 expected_results EF-E
+83_y: OK regex: 'abcd*efg'i parsed_regex: 'abcd*efg'i str: ABCDEFG result_expr: $& expected_results ABCDEFG
+84_y: OK regex: 'ab*'i parsed_regex: 'ab*'i str: XABYABBBZ result_expr: $& expected_results AB
+85_y: OK regex: 'ab*'i parsed_regex: 'ab*'i str: XAYABBBZ result_expr: $& expected_results A
+86_y: OK regex: '(ab|cd)e'i parsed_regex: '(ab|cd)e'i str: ABCDE result_expr: $&-$1 expected_results CDE-CD
+87_y: OK regex: '[abhgefdc]ij'i parsed_regex: '[abhgefdc]ij'i str: HIJ result_expr: $& expected_results HIJ
+88_n: OK regex: '^(ab|cd)e'i parsed_regex: '^(ab|cd)e'i str: ABCDE result_expr: x$1y expected_results XY
+89_y: OK regex: '(abc|)ef'i parsed_regex: '(abc|)ef'i str: ABCDEF result_expr: $&-$1 expected_results EF-
+90_y: OK regex: '(a|b)c*d'i parsed_regex: '(a|b)c*d'i str: ABCD result_expr: $&-$1 expected_results BCD-B
+91_y: OK regex: '(ab|ab*)bc'i parsed_regex: '(ab|ab*)bc'i str: ABC result_expr: $&-$1 expected_results ABC-A
+92_y: OK regex: 'a([bc]*)c*'i parsed_regex: 'a([bc]*)c*'i str: ABC result_expr: $&-$1 expected_results ABC-BC
+93_y: OK regex: 'a([bc]*)(c*d)'i parsed_regex: 'a([bc]*)(c*d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-BC-D
+94_y: OK regex: 'a([bc]+)(c*d)'i parsed_regex: 'a([bc]+)(c*d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-BC-D
+95_y: OK regex: 'a([bc]*)(c+d)'i parsed_regex: 'a([bc]*)(c+d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-B-CD
+96_y: OK regex: 'a[bcd]*dcdcde'i parsed_regex: 'a[bcd]*dcdcde'i str: ADCDCDE result_expr: $& expected_results ADCDCDE
+97_n: OK regex: 'a[bcd]+dcdcde'i parsed_regex: 'a[bcd]+dcdcde'i str: ADCDCDE result_expr: - expected_results -
+98_y: OK regex: '(ab|a)b*c'i parsed_regex: '(ab|a)b*c'i str: ABC result_expr: $&-$1 expected_results ABC-AB
+99_y: OK regex: '((a)(b)c)(d)'i parsed_regex: '((a)(b)c)(d)'i str: ABCD result_expr: $1-$2-$3-$4 expected_results ABC-A-B-D
+100_y: OK regex: '[a-zA-Z_][a-zA-Z0-9_]*'i parsed_regex: '[a-zA-Z_][a-zA-Z0-9_]*'i str: ALPHA result_expr: $& expected_results ALPHA
+101_y: OK regex: '^a(bc+|b[eh])g|.h$'i parsed_regex: '^a(bc+|b[eh])g|.h$'i str: ABH result_expr: $&-$1 expected_results BH-
+102_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: EFFGZ result_expr: $&-$1-$2 expected_results EFFGZ-EFFGZ-
+103_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: IJ result_expr: $&-$1-$2 expected_results IJ-IJ-J
+104_n: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: EFFG result_expr: - expected_results -
+105_n: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: BCDD result_expr: - expected_results -
+106_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: REFFGZ result_expr: $&-$1-$2 expected_results EFFGZ-EFFGZ-
+107_y: OK regex: '((((((((((a))))))))))'i parsed_regex: '((((((((((a))))))))))'i str: A result_expr: $10 expected_results A
+108_y: OK regex: '((((((((((a))))))))))\10'i parsed_regex: '((((((((((a))))))))))\10'i str: AA result_expr: $& expected_results AA
+109_y: OK regex: '(((((((((a)))))))))'i parsed_regex: '(((((((((a)))))))))'i str: A result_expr: $& expected_results A
+110_n: OK regex: 'multiple words of text'i parsed_regex: 'multiple words of text'i str: UH-UH result_expr: - expected_results -
+111_y: OK regex: 'multiple words'i parsed_regex: 'multiple words'i str: MULTIPLE WORDS, YEAH result_expr: $& expected_results MULTIPLE WORDS
+112_y: OK regex: '(.*)c(.*)'i parsed_regex: '(.*)c(.*)'i str: ABCDE result_expr: $&-$1-$2 expected_results ABCDE-AB-DE
+113_y: OK regex: '\((.*), (.*)\)'i parsed_regex: '\((.*), (.*)\)'i str: (A, B) result_expr: ($2, $1) expected_results (B, A)
+114_n: OK regex: '[k]'i parsed_regex: '[k]'i str: AB result_expr: - expected_results -
+115_y: OK regex: 'abcd'i parsed_regex: 'abcd'i str: ABCD result_expr: $& expected_results ABCD
+116_y: OK regex: 'a(bc)d'i parsed_regex: 'a(bc)d'i str: ABCD result_expr: $1 expected_results BC
+117_y: OK regex: 'a[-]?c'i parsed_regex: 'a[-]?c'i str: AC result_expr: $& expected_results AC
+118_y: OK regex: '(abc)\1'i parsed_regex: '(abc)\1'i str: ABCABC result_expr: $1 expected_results ABC
+119_y: OK regex: '([a-c]*)\1'i parsed_regex: '([a-c]*)\1'i str: ABCABC result_expr: $1 expected_results ABC
+
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_12_case_insensitive.cpp.output b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_12_case_insensitive.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_13_posessive_modifier.cpp.execution b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_13_posessive_modifier.cpp.execution
new file mode 100644
index 000000000..916d1a084
--- /dev/null
+++ b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_13_posessive_modifier.cpp.execution
@@ -0,0 +1,50 @@
+Running tests_13_posessive_modifier:
+01_n: OK regex: a++a parsed_regex: a++a str: aaaaa result_expr: - expected_results -
+02_n: OK regex: a*+a parsed_regex: a*+a str: aaaaa result_expr: - expected_results -
+03_n: OK regex: a{1,5}+a parsed_regex: a{1,5}+a str: aaaaa result_expr: - expected_results -
+04_n: OK regex: a?+a parsed_regex: a?+a str: ab result_expr: - expected_results -
+05_y: OK regex: a++b parsed_regex: a++b str: aaaaab result_expr: $& expected_results aaaaab
+06_y: OK regex: a*+b parsed_regex: a*+b str: aaaaab result_expr: $& expected_results aaaaab
+07_y: OK regex: a{1,5}+b parsed_regex: a{1,5}+b str: aaaaab result_expr: $& expected_results aaaaab
+08_y: OK regex: a?+b parsed_regex: a?+b str: ab result_expr: $& expected_results ab
+09_n: OK regex: fooa++a parsed_regex: fooa++a str: fooaaaaa result_expr: - expected_results -
+10_n: OK regex: fooa*+a parsed_regex: fooa*+a str: fooaaaaa result_expr: - expected_results -
+11_n: OK regex: fooa{1,5}+a parsed_regex: fooa{1,5}+a str: fooaaaaa result_expr: - expected_results -
+12_n: OK regex: fooa?+a parsed_regex: fooa?+a str: fooab result_expr: - expected_results -
+13_y: OK regex: fooa++b parsed_regex: fooa++b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+14_y: OK regex: fooa*+b parsed_regex: fooa*+b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+15_y: OK regex: fooa{1,5}+b parsed_regex: fooa{1,5}+b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+16_y: OK regex: fooa?+b parsed_regex: fooa?+b str: fooab result_expr: $& expected_results fooab
+17_n: OK regex: (aA)++(aA) parsed_regex: (aA)++(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+18_n: OK regex: (aA|bB)++(aA|bB) parsed_regex: (aA|bB)++(aA|bB) str: aAaAbBaAbB result_expr: - expected_results aAaAbBaAbB
+19_n: OK regex: (aA)*+(aA) parsed_regex: (aA)*+(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+20_n: OK regex: (aA|bB)*+(aA|bB) parsed_regex: (aA|bB)*+(aA|bB) str: aAaAbBaAaA result_expr: - expected_results aAaAbBaAaA
+21_n: OK regex: (aA){1,5}+(aA) parsed_regex: (aA){1,5}+(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+22_n: OK regex: (aA|bB){1,5}+(aA|bB) parsed_regex: (aA|bB){1,5}+(aA|bB) str: aAaAbBaAaA result_expr: - expected_results aAaAbBaAaA
+23_n: OK regex: (aA)?+(aA) parsed_regex: (aA)?+(aA) str: aAb result_expr: - expected_results aAb
+24_n: OK regex: (aA|bB)?+(aA|bB) parsed_regex: (aA|bB)?+(aA|bB) str: bBb result_expr: - expected_results bBb
+25_y: OK regex: (aA)++b parsed_regex: (aA)++b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+26_y: OK regex: (aA|bB)++b parsed_regex: (aA|bB)++b str: aAbBaAaAbBb result_expr: $& expected_results aAbBaAaAbBb
+27_y: OK regex: (aA)*+b parsed_regex: (aA)*+b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+28_y: OK regex: (aA|bB)*+b parsed_regex: (aA|bB)*+b str: bBbBbBbBbBb result_expr: $& expected_results bBbBbBbBbBb
+29_y: OK regex: (aA){1,5}+b parsed_regex: (aA){1,5}+b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+30_y: OK regex: (aA|bB){1,5}+b parsed_regex: (aA|bB){1,5}+b str: bBaAbBaAbBb result_expr: $& expected_results bBaAbBaAbBb
+31_y: OK regex: (aA)?+b parsed_regex: (aA)?+b str: aAb result_expr: $& expected_results aAb
+32_y: OK regex: (aA|bB)?+b parsed_regex: (aA|bB)?+b str: bBb result_expr: $& expected_results bBb
+33_n: OK regex: foo(aA)++(aA) parsed_regex: foo(aA)++(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+34_n: OK regex: foo(aA|bB)++(aA|bB) parsed_regex: foo(aA|bB)++(aA|bB) str: foobBbBbBaAaA result_expr: - expected_results foobBbBbBaAaA
+35_n: OK regex: foo(aA)*+(aA) parsed_regex: foo(aA)*+(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+36_n: OK regex: foo(aA|bB)*+(aA|bB) parsed_regex: foo(aA|bB)*+(aA|bB) str: foobBaAbBaAaA result_expr: - expected_results foobBaAbBaAaA
+37_n: OK regex: foo(aA){1,5}+(aA) parsed_regex: foo(aA){1,5}+(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+38_n: OK regex: foo(aA|bB){1,5}+(aA|bB) parsed_regex: foo(aA|bB){1,5}+(aA|bB) str: fooaAbBbBaAaA result_expr: - expected_results fooaAbBbBaAaA
+39_n: OK regex: foo(aA)?+(aA) parsed_regex: foo(aA)?+(aA) str: fooaAb result_expr: - expected_results fooaAb
+40_n: OK regex: foo(aA|bB)?+(aA|bB) parsed_regex: foo(aA|bB)?+(aA|bB) str: foobBb result_expr: - expected_results foobBb
+41_y: OK regex: foo(aA)++b parsed_regex: foo(aA)++b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+42_y: OK regex: foo(aA|bB)++b parsed_regex: foo(aA|bB)++b str: foobBaAbBaAbBb result_expr: $& expected_results foobBaAbBaAbBb
+43_y: OK regex: foo(aA)*+b parsed_regex: foo(aA)*+b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+44_y: OK regex: foo(aA|bB)*+b parsed_regex: foo(aA|bB)*+b str: foobBbBaAaAaAb result_expr: $& expected_results foobBbBaAaAaAb
+45_y: OK regex: foo(aA){1,5}+b parsed_regex: foo(aA){1,5}+b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+46_y: OK regex: foo(aA|bB){1,5}+b parsed_regex: foo(aA|bB){1,5}+b str: foobBaAaAaAaAb result_expr: $& expected_results foobBaAaAaAaAb
+47_y: OK regex: foo(aA)?+b parsed_regex: foo(aA)?+b str: fooaAb result_expr: $& expected_results fooaAb
+48_y: OK regex: foo(aA|bB)?+b parsed_regex: foo(aA|bB)?+b str: foobBb result_expr: $& expected_results foobBb
+
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_13_posessive_modifier.cpp.output b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_13_posessive_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_14_multiline_modifier.cpp.execution b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_14_multiline_modifier.cpp.execution
new file mode 100644
index 000000000..9a12081ac
--- /dev/null
+++ b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_14_multiline_modifier.cpp.execution
@@ -0,0 +1,533 @@
+Running tests_14_multiline_modifier:
+01_y: OK regex: \Z parsed_regex: \Z str: a
+b
+ result_expr: $-[0] expected_results 3
+02_y: OK regex: \z parsed_regex: \z str: a
+b
+ result_expr: $-[0] expected_results 4
+03_y: OK regex: $ parsed_regex: $ str: a
+b
+ result_expr: $-[0] expected_results 3
+04_y: OK regex: \Z parsed_regex: \Z str: b
+a
+ result_expr: $-[0] expected_results 3
+05_y: OK regex: \z parsed_regex: \z str: b
+a
+ result_expr: $-[0] expected_results 4
+06_y: OK regex: $ parsed_regex: $ str: b
+a
+ result_expr: $-[0] expected_results 3
+07_y: OK regex: \Z parsed_regex: \Z str: b
+a result_expr: $-[0] expected_results 3
+08_y: OK regex: \z parsed_regex: \z str: b
+a result_expr: $-[0] expected_results 3
+09_y: OK regex: $ parsed_regex: $ str: b
+a result_expr: $-[0] expected_results 3
+10_y: OK regex: '\Z'm parsed_regex: '\Z'm str: a
+b
+ result_expr: $-[0] expected_results 3
+11_y: OK regex: '\z'm parsed_regex: '\z'm str: a
+b
+ result_expr: $-[0] expected_results 4
+12_y: OK regex: '$'m parsed_regex: '$'m str: a
+b
+ result_expr: $-[0] expected_results 1
+13_y: OK regex: '\Z'm parsed_regex: '\Z'm str: b
+a
+ result_expr: $-[0] expected_results 3
+14_y: OK regex: '\z'm parsed_regex: '\z'm str: b
+a
+ result_expr: $-[0] expected_results 4
+15_y: OK regex: '$'m parsed_regex: '$'m str: b
+a
+ result_expr: $-[0] expected_results 1
+16_y: OK regex: '\Z'm parsed_regex: '\Z'm str: b
+a result_expr: $-[0] expected_results 3
+17_y: OK regex: '\z'm parsed_regex: '\z'm str: b
+a result_expr: $-[0] expected_results 3
+18_y: OK regex: '$'m parsed_regex: '$'m str: b
+a result_expr: $-[0] expected_results 1
+19_n: OK regex: a\Z parsed_regex: a\Z str: a
+b
+ result_expr: - expected_results -
+20_n: OK regex: a\z parsed_regex: a\z str: a
+b
+ result_expr: - expected_results -
+21_n: OK regex: a$ parsed_regex: a$ str: a
+b
+ result_expr: - expected_results -
+22_y: OK regex: a\Z parsed_regex: a\Z str: b
+a
+ result_expr: $-[0] expected_results 2
+23_n: OK regex: a\z parsed_regex: a\z str: b
+a
+ result_expr: - expected_results -
+24_y: OK regex: a$ parsed_regex: a$ str: b
+a
+ result_expr: $-[0] expected_results 2
+25_y: OK regex: a\Z parsed_regex: a\Z str: b
+a result_expr: $-[0] expected_results 2
+26_y: OK regex: a\z parsed_regex: a\z str: b
+a result_expr: $-[0] expected_results 2
+27_y: OK regex: a$ parsed_regex: a$ str: b
+a result_expr: $-[0] expected_results 2
+28_n: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: a
+b
+ result_expr: - expected_results -
+29_n: OK regex: 'a\z'm parsed_regex: 'a\z'm str: a
+b
+ result_expr: - expected_results -
+30_y: OK regex: 'a$'m parsed_regex: 'a$'m str: a
+b
+ result_expr: $-[0] expected_results 0
+31_y: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: b
+a
+ result_expr: $-[0] expected_results 2
+32_n: OK regex: 'a\z'm parsed_regex: 'a\z'm str: b
+a
+ result_expr: - expected_results -
+33_y: OK regex: 'a$'m parsed_regex: 'a$'m str: b
+a
+ result_expr: $-[0] expected_results 2
+34_y: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: b
+a result_expr: $-[0] expected_results 2
+35_y: OK regex: 'a\z'm parsed_regex: 'a\z'm str: b
+a result_expr: $-[0] expected_results 2
+36_y: OK regex: 'a$'m parsed_regex: 'a$'m str: b
+a result_expr: $-[0] expected_results 2
+37_n: OK regex: aa\Z parsed_regex: aa\Z str: aa
+b
+ result_expr: - expected_results -
+38_n: OK regex: aa\z parsed_regex: aa\z str: aa
+b
+ result_expr: - expected_results -
+39_n: OK regex: aa$ parsed_regex: aa$ str: aa
+b
+ result_expr: - expected_results -
+40_y: OK regex: aa\Z parsed_regex: aa\Z str: b
+aa
+ result_expr: $-[0] expected_results 2
+41_n: OK regex: aa\z parsed_regex: aa\z str: b
+aa
+ result_expr: - expected_results -
+42_y: OK regex: aa$ parsed_regex: aa$ str: b
+aa
+ result_expr: $-[0] expected_results 2
+43_y: OK regex: aa\Z parsed_regex: aa\Z str: b
+aa result_expr: $-[0] expected_results 2
+44_y: OK regex: aa\z parsed_regex: aa\z str: b
+aa result_expr: $-[0] expected_results 2
+45_y: OK regex: aa$ parsed_regex: aa$ str: b
+aa result_expr: $-[0] expected_results 2
+46_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: aa
+b
+ result_expr: - expected_results -
+47_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: aa
+b
+ result_expr: - expected_results -
+48_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: aa
+b
+ result_expr: $-[0] expected_results 0
+49_y: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+aa
+ result_expr: $-[0] expected_results 2
+50_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+aa
+ result_expr: - expected_results -
+51_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+aa
+ result_expr: $-[0] expected_results 2
+52_y: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+aa result_expr: $-[0] expected_results 2
+53_y: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+aa result_expr: $-[0] expected_results 2
+54_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+aa result_expr: $-[0] expected_results 2
+55_n: OK regex: aa\Z parsed_regex: aa\Z str: ac
+b
+ result_expr: - expected_results -
+56_n: OK regex: aa\z parsed_regex: aa\z str: ac
+b
+ result_expr: - expected_results -
+57_n: OK regex: aa$ parsed_regex: aa$ str: ac
+b
+ result_expr: - expected_results -
+58_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ac
+ result_expr: - expected_results -
+59_n: OK regex: aa\z parsed_regex: aa\z str: b
+ac
+ result_expr: - expected_results -
+60_n: OK regex: aa$ parsed_regex: aa$ str: b
+ac
+ result_expr: - expected_results -
+61_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ac result_expr: - expected_results -
+62_n: OK regex: aa\z parsed_regex: aa\z str: b
+ac result_expr: - expected_results -
+63_n: OK regex: aa$ parsed_regex: aa$ str: b
+ac result_expr: - expected_results -
+64_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: ac
+b
+ result_expr: - expected_results -
+65_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: ac
+b
+ result_expr: - expected_results -
+66_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: ac
+b
+ result_expr: - expected_results -
+67_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ac
+ result_expr: - expected_results -
+68_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ac
+ result_expr: - expected_results -
+69_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ac
+ result_expr: - expected_results -
+70_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ac result_expr: - expected_results -
+71_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ac result_expr: - expected_results -
+72_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ac result_expr: - expected_results -
+73_n: OK regex: aa\Z parsed_regex: aa\Z str: ca
+b
+ result_expr: - expected_results -
+74_n: OK regex: aa\z parsed_regex: aa\z str: ca
+b
+ result_expr: - expected_results -
+75_n: OK regex: aa$ parsed_regex: aa$ str: ca
+b
+ result_expr: - expected_results -
+76_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ca
+ result_expr: - expected_results -
+77_n: OK regex: aa\z parsed_regex: aa\z str: b
+ca
+ result_expr: - expected_results -
+78_n: OK regex: aa$ parsed_regex: aa$ str: b
+ca
+ result_expr: - expected_results -
+79_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ca result_expr: - expected_results -
+80_n: OK regex: aa\z parsed_regex: aa\z str: b
+ca result_expr: - expected_results -
+81_n: OK regex: aa$ parsed_regex: aa$ str: b
+ca result_expr: - expected_results -
+82_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: ca
+b
+ result_expr: - expected_results -
+83_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: ca
+b
+ result_expr: - expected_results -
+84_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: ca
+b
+ result_expr: - expected_results -
+85_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ca
+ result_expr: - expected_results -
+86_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ca
+ result_expr: - expected_results -
+87_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ca
+ result_expr: - expected_results -
+88_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ca result_expr: - expected_results -
+89_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ca result_expr: - expected_results -
+90_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ca result_expr: - expected_results -
+91_n: OK regex: ab\Z parsed_regex: ab\Z str: ab
+b
+ result_expr: - expected_results -
+92_n: OK regex: ab\z parsed_regex: ab\z str: ab
+b
+ result_expr: - expected_results -
+93_n: OK regex: ab$ parsed_regex: ab$ str: ab
+b
+ result_expr: - expected_results -
+94_y: OK regex: ab\Z parsed_regex: ab\Z str: b
+ab
+ result_expr: $-[0] expected_results 2
+95_n: OK regex: ab\z parsed_regex: ab\z str: b
+ab
+ result_expr: - expected_results -
+96_y: OK regex: ab$ parsed_regex: ab$ str: b
+ab
+ result_expr: $-[0] expected_results 2
+97_y: OK regex: ab\Z parsed_regex: ab\Z str: b
+ab result_expr: $-[0] expected_results 2
+98_y: OK regex: ab\z parsed_regex: ab\z str: b
+ab result_expr: $-[0] expected_results 2
+99_y: OK regex: ab$ parsed_regex: ab$ str: b
+ab result_expr: $-[0] expected_results 2
+100_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ab
+b
+ result_expr: - expected_results -
+101_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ab
+b
+ result_expr: - expected_results -
+102_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ab
+b
+ result_expr: $-[0] expected_results 0
+103_y: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ab
+ result_expr: $-[0] expected_results 2
+104_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ab
+ result_expr: - expected_results -
+105_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ab
+ result_expr: $-[0] expected_results 2
+106_y: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ab result_expr: $-[0] expected_results 2
+107_y: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ab result_expr: $-[0] expected_results 2
+108_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ab result_expr: $-[0] expected_results 2
+109_n: OK regex: ab\Z parsed_regex: ab\Z str: ac
+b
+ result_expr: - expected_results -
+110_n: OK regex: ab\z parsed_regex: ab\z str: ac
+b
+ result_expr: - expected_results -
+111_n: OK regex: ab$ parsed_regex: ab$ str: ac
+b
+ result_expr: - expected_results -
+112_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ac
+ result_expr: - expected_results -
+113_n: OK regex: ab\z parsed_regex: ab\z str: b
+ac
+ result_expr: - expected_results -
+114_n: OK regex: ab$ parsed_regex: ab$ str: b
+ac
+ result_expr: - expected_results -
+115_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ac result_expr: - expected_results -
+116_n: OK regex: ab\z parsed_regex: ab\z str: b
+ac result_expr: - expected_results -
+117_n: OK regex: ab$ parsed_regex: ab$ str: b
+ac result_expr: - expected_results -
+118_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ac
+b
+ result_expr: - expected_results -
+119_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ac
+b
+ result_expr: - expected_results -
+120_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ac
+b
+ result_expr: - expected_results -
+121_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ac
+ result_expr: - expected_results -
+122_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ac
+ result_expr: - expected_results -
+123_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ac
+ result_expr: - expected_results -
+124_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ac result_expr: - expected_results -
+125_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ac result_expr: - expected_results -
+126_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ac result_expr: - expected_results -
+127_n: OK regex: ab\Z parsed_regex: ab\Z str: ca
+b
+ result_expr: - expected_results -
+128_n: OK regex: ab\z parsed_regex: ab\z str: ca
+b
+ result_expr: - expected_results -
+129_n: OK regex: ab$ parsed_regex: ab$ str: ca
+b
+ result_expr: - expected_results -
+130_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ca
+ result_expr: - expected_results -
+131_n: OK regex: ab\z parsed_regex: ab\z str: b
+ca
+ result_expr: - expected_results -
+132_n: OK regex: ab$ parsed_regex: ab$ str: b
+ca
+ result_expr: - expected_results -
+133_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ca result_expr: - expected_results -
+134_n: OK regex: ab\z parsed_regex: ab\z str: b
+ca result_expr: - expected_results -
+135_n: OK regex: ab$ parsed_regex: ab$ str: b
+ca result_expr: - expected_results -
+136_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ca
+b
+ result_expr: - expected_results -
+137_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ca
+b
+ result_expr: - expected_results -
+138_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ca
+b
+ result_expr: - expected_results -
+139_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ca
+ result_expr: - expected_results -
+140_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ca
+ result_expr: - expected_results -
+141_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ca
+ result_expr: - expected_results -
+142_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ca result_expr: - expected_results -
+143_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ca result_expr: - expected_results -
+144_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ca result_expr: - expected_results -
+145_n: OK regex: abb\Z parsed_regex: abb\Z str: abb
+b
+ result_expr: - expected_results -
+146_n: OK regex: abb\z parsed_regex: abb\z str: abb
+b
+ result_expr: - expected_results -
+147_n: OK regex: abb$ parsed_regex: abb$ str: abb
+b
+ result_expr: - expected_results -
+148_y: OK regex: abb\Z parsed_regex: abb\Z str: b
+abb
+ result_expr: $-[0] expected_results 2
+149_n: OK regex: abb\z parsed_regex: abb\z str: b
+abb
+ result_expr: - expected_results -
+150_y: OK regex: abb$ parsed_regex: abb$ str: b
+abb
+ result_expr: $-[0] expected_results 2
+151_y: OK regex: abb\Z parsed_regex: abb\Z str: b
+abb result_expr: $-[0] expected_results 2
+152_y: OK regex: abb\z parsed_regex: abb\z str: b
+abb result_expr: $-[0] expected_results 2
+153_y: OK regex: abb$ parsed_regex: abb$ str: b
+abb result_expr: $-[0] expected_results 2
+154_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: abb
+b
+ result_expr: - expected_results -
+155_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: abb
+b
+ result_expr: - expected_results -
+156_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: abb
+b
+ result_expr: $-[0] expected_results 0
+157_y: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+abb
+ result_expr: $-[0] expected_results 2
+158_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+abb
+ result_expr: - expected_results -
+159_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+abb
+ result_expr: $-[0] expected_results 2
+160_y: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+abb result_expr: $-[0] expected_results 2
+161_y: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+abb result_expr: $-[0] expected_results 2
+162_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+abb result_expr: $-[0] expected_results 2
+163_n: OK regex: abb\Z parsed_regex: abb\Z str: ac
+b
+ result_expr: - expected_results -
+164_n: OK regex: abb\z parsed_regex: abb\z str: ac
+b
+ result_expr: - expected_results -
+165_n: OK regex: abb$ parsed_regex: abb$ str: ac
+b
+ result_expr: - expected_results -
+166_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ac
+ result_expr: - expected_results -
+167_n: OK regex: abb\z parsed_regex: abb\z str: b
+ac
+ result_expr: - expected_results -
+168_n: OK regex: abb$ parsed_regex: abb$ str: b
+ac
+ result_expr: - expected_results -
+169_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ac result_expr: - expected_results -
+170_n: OK regex: abb\z parsed_regex: abb\z str: b
+ac result_expr: - expected_results -
+171_n: OK regex: abb$ parsed_regex: abb$ str: b
+ac result_expr: - expected_results -
+172_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: ac
+b
+ result_expr: - expected_results -
+173_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: ac
+b
+ result_expr: - expected_results -
+174_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: ac
+b
+ result_expr: - expected_results -
+175_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ac
+ result_expr: - expected_results -
+176_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ac
+ result_expr: - expected_results -
+177_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ac
+ result_expr: - expected_results -
+178_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ac result_expr: - expected_results -
+179_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ac result_expr: - expected_results -
+180_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ac result_expr: - expected_results -
+181_n: OK regex: abb\Z parsed_regex: abb\Z str: ca
+b
+ result_expr: - expected_results -
+182_n: OK regex: abb\z parsed_regex: abb\z str: ca
+b
+ result_expr: - expected_results -
+183_n: OK regex: abb$ parsed_regex: abb$ str: ca
+b
+ result_expr: - expected_results -
+184_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ca
+ result_expr: - expected_results -
+185_n: OK regex: abb\z parsed_regex: abb\z str: b
+ca
+ result_expr: - expected_results -
+186_n: OK regex: abb$ parsed_regex: abb$ str: b
+ca
+ result_expr: - expected_results -
+187_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ca result_expr: - expected_results -
+188_n: OK regex: abb\z parsed_regex: abb\z str: b
+ca result_expr: - expected_results -
+189_n: OK regex: abb$ parsed_regex: abb$ str: b
+ca result_expr: - expected_results -
+190_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: ca
+b
+ result_expr: - expected_results -
+191_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: ca
+b
+ result_expr: - expected_results -
+192_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: ca
+b
+ result_expr: - expected_results -
+193_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ca
+ result_expr: - expected_results -
+194_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ca
+ result_expr: - expected_results -
+195_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ca
+ result_expr: - expected_results -
+196_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ca result_expr: - expected_results -
+197_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ca result_expr: - expected_results -
+198_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ca result_expr: - expected_results -
+199_y: OK regex: '\Aa$'m parsed_regex: '\Aa$'m str: a
+
+ result_expr: $& expected_results a
+
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_14_multiline_modifier.cpp.output b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_14_multiline_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_15_group_modifiers.cpp.execution b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_15_group_modifiers.cpp.execution
new file mode 100644
index 000000000..de92abc48
--- /dev/null
+++ b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_15_group_modifiers.cpp.execution
@@ -0,0 +1,87 @@
+Running tests_15_group_modifiers:
+01_y: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: ab result_expr: $& expected_results ab
+02_y: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: ab result_expr: $&:$1 expected_results ab:a
+03_y: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: Ab result_expr: $& expected_results Ab
+04_y: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: Ab result_expr: $&:$1 expected_results Ab:A
+05_n: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: aB result_expr: - expected_results -
+06_n: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: aB result_expr: - expected_results -
+07_y: OK regex: (?i:a)b parsed_regex: (?i:a)b str: ab result_expr: $& expected_results ab
+08_y: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: ab result_expr: $&:$1 expected_results ab:a
+09_y: OK regex: (?i:a)b parsed_regex: (?i:a)b str: Ab result_expr: $& expected_results Ab
+10_y: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: Ab result_expr: $&:$1 expected_results Ab:A
+11_n: OK regex: (?i:a)b parsed_regex: (?i:a)b str: aB result_expr: - expected_results -
+12_n: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: aB result_expr: - expected_results -
+13_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: ab result_expr: $& expected_results ab
+14_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: ab result_expr: $&:$1 expected_results ab:a
+15_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: aB result_expr: $& expected_results aB
+16_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: aB result_expr: $&:$1 expected_results aB:a
+17_n: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: Ab result_expr: - expected_results -
+18_n: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: Ab result_expr: - expected_results -
+19_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: aB result_expr: $& expected_results aB
+20_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: aB result_expr: $1 expected_results a
+21_n: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: AB result_expr: - expected_results -
+22_n: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: AB result_expr: - expected_results -
+23_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: ab result_expr: $& expected_results ab
+24_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: ab result_expr: $&:$1 expected_results ab:a
+25_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: aB result_expr: $& expected_results aB
+26_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: aB result_expr: $&:$1 expected_results aB:a
+27_n: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: Ab result_expr: - expected_results -
+28_n: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: Ab result_expr: - expected_results -
+29_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: aB result_expr: $& expected_results aB
+30_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: aB result_expr: $1 expected_results a
+31_n: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: AB result_expr: - expected_results -
+32_n: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: AB result_expr: - expected_results -
+33_n: OK regex: '((?-i:a.))b'i parsed_regex: '((?-i:a.))b'i str: a
+B result_expr: - expected_results -
+34_n: OK regex: '((?-i:a\N))b'i parsed_regex: '((?-i:a\N))b'i str: a
+B result_expr: - expected_results -
+35_y: OK regex: '((?s-i:a.))b'i parsed_regex: '((?s-i:a.))b'i str: a
+B result_expr: $1 expected_results a
+
+36_n: OK regex: '((?s-i:a\N))b'i parsed_regex: '((?s-i:a\N))b'i str: a
+B result_expr: - expected_results -
+37_n: OK regex: '((?s-i:a.))b'i parsed_regex: '((?s-i:a.))b'i str: B
+B result_expr: - expected_results -
+38_n: OK regex: '((?s-i:a\N))b'i parsed_regex: '((?s-i:a\N))b'i str: B
+B result_expr: - expected_results -
+39_y: OK regex: (?i:.[b].) parsed_regex: (?i:.[b].) str: abd result_expr: $& expected_results abd
+40_y: OK regex: (?i:\N[b]\N) parsed_regex: (?i:\N[b]\N) str: abd result_expr: $& expected_results abd
+41_n: OK regex: ^(?:a?b?)*$ parsed_regex: ^(?:a?b?)*$ str: a-- result_expr: - expected_results -
+42_y: OK regex: ((?s)^a(.))((?m)^b$) parsed_regex: ((?s)^a(.))((?m)^b$) str: a
+b
+c
+ result_expr: $1;$2;$3 expected_results a
+;
+;b
+43_y: OK regex: ((?m)^b$) parsed_regex: ((?m)^b$) str: a
+b
+c
+ result_expr: $1 expected_results b
+44_y: OK regex: (?m)^b parsed_regex: (?m)^b str: a
+b
+ result_expr: $& expected_results b
+45_y: OK regex: (?m)^(b) parsed_regex: (?m)^(b) str: a
+b
+ result_expr: $1 expected_results b
+46_y: OK regex: ((?m)^b) parsed_regex: ((?m)^b) str: a
+b
+ result_expr: $1 expected_results b
+47_y: OK regex: \n((?m)^b) parsed_regex: \n((?m)^b) str: a
+b
+ result_expr: $1 expected_results b
+48_n: OK regex: ^b parsed_regex: ^b str: a
+b
+c
+ result_expr: - expected_results -
+49_n: OK regex: ()^b parsed_regex: ()^b str: a
+b
+c
+ result_expr: - expected_results -
+50_y: OK regex: ((?m)^b) parsed_regex: ((?m)^b) str: a
+b
+c
+ result_expr: $1 expected_results b
+51_y: OK Warning: Parsed regex does not match. regex: '(foo)'n parsed_regex: '(?:foo)'n str: foobar result_expr: $&-$1 expected_results foo-
+52_y: OK Warning: Parsed regex does not match. regex: '(?-n)(foo)(?n)(bar)'n parsed_regex: '(?-n)(foo)(?n)(?:bar)'n str: foobar result_expr: $&-$1-$2 expected_results foobar-foo-
+53_y: OK Warning: Parsed regex does not match. regex: '(?-n:(foo)(?n:(bar)))'n parsed_regex: '(?-n:(foo)(?n:(?:bar)))'n str: foobar result_expr: $&-$1-$2 expected_results foobar-foo-
+
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_15_group_modifiers.cpp.output b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_15_group_modifiers.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_16_perl_syntax_modifier.cpp.execution b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_16_perl_syntax_modifier.cpp.execution
new file mode 100644
index 000000000..761720007
--- /dev/null
+++ b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_16_perl_syntax_modifier.cpp.execution
@@ -0,0 +1,35 @@
+Running tests_16_perl_syntax_modifier:
+01_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $& expected_results a
+02_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $-[0] expected_results 0
+03_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $+[0] expected_results 1
+04_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $& expected_results abbb
+05_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $-[0] expected_results 0
+06_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $+[0] expected_results 4
+07_y: OK Warning: Parsed regex does not match. regex: /a\N c/x parsed_regex: /a\Nc/x str: abc result_expr: $& expected_results abc
+08_y: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzc result_expr: $& expected_results axyzc
+09_n: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzd result_expr: - expected_results -
+10_yS: OK regex: /[a b]/x parsed_regex: /[a b]/x str:   result_expr: $& expected_results  
+11_n: OK regex: /[a b]/xx parsed_regex: /[a b]/xx str:   result_expr: - expected_results -
+12_y: OK regex: /[a\ b]/xx parsed_regex: /[a\ b]/xx str:   result_expr: $& expected_results  
+13_n: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: a result_expr: - expected_results -
+14_n: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: b result_expr: - expected_results -
+15_y: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: A result_expr: $& expected_results A
+16_yS: OK regex: /(?x:[a b])/xx parsed_regex: /(?x:[a b])/xx str:   result_expr: $& expected_results  
+17_n: OK regex: /(?xx:[a b])/x parsed_regex: /(?xx:[a b])/x str:   result_expr: - expected_results -
+18_yS: OK regex: /(?x)[a b]/xx parsed_regex: /(?x)[a b]/xx str:   result_expr: $& expected_results  
+19_n: OK regex: /(?xx)[a b]/x parsed_regex: /(?xx)[a b]/x str:   result_expr: - expected_results -
+20_yS: OK regex: /(?-x:[a b])/xx parsed_regex: /(?-x:[a b])/xx str:   result_expr: $& expected_results  
+21_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $& expected_results a
+22_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $-[0] expected_results 0
+23_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $+[0] expected_results 1
+24_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $& expected_results abbb
+25_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $-[0] expected_results 0
+26_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $+[0] expected_results 4
+27_y: OK Warning: Parsed regex does not match. regex: /a\N c/x parsed_regex: /a\Nc/x str: abc result_expr: $& expected_results abc
+28_y: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzc result_expr: $& expected_results axyzc
+29_n: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzd result_expr: - expected_results -
+30_y: OK regex: /[#]/ parsed_regex: /[#]/ str: a#b result_expr: $& expected_results #
+31_y: OK regex: /[#]b/ parsed_regex: /[#]b/ str: a#b result_expr: $& expected_results #b
+32_y: OK regex: /[#]/x parsed_regex: /[#]/x str: a#b result_expr: $& expected_results #
+33_y: OK regex: /[#]b/x parsed_regex: /[#]b/x str: a#b result_expr: $& expected_results #b
+
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_16_perl_syntax_modifier.cpp.output b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_16_perl_syntax_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_17_comments.cpp.execution b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_17_comments.cpp.execution
new file mode 100644
index 000000000..17c9a5d55
--- /dev/null
+++ b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_17_comments.cpp.execution
@@ -0,0 +1,5 @@
+Running tests_17_comments:
+01_y: OK regex: ^a(?#xxx){3}c parsed_regex: ^a(?#xxx){3}c str: aaac result_expr: $& expected_results aaac
+02_y: OK Warning: Parsed regex does not match. regex: '^a (?#xxx) (?#yyy) {3}c'x parsed_regex: '^a(?#xxx)(?#yyy){3}c'x str: aaac result_expr: $& expected_results aaac
+03_y: OK Warning: Parsed regex does not match. regex: 'foo # Match foo'x parsed_regex: 'foo'x str: foobar result_expr: $& expected_results foo
+
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_17_comments.cpp.output b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_17_comments.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_18_branch_reset.cpp.execution b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_18_branch_reset.cpp.execution
new file mode 100644
index 000000000..1d088ce31
--- /dev/null
+++ b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_18_branch_reset.cpp.execution
@@ -0,0 +1,17 @@
+Running tests_18_branch_reset:
+01_y: OK regex: (?|(a)) parsed_regex: (?|(a)) str: a result_expr: $1-$+ expected_results a-a
+02_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: d!o!da result_expr: $1-$2-$3 expected_results !o!-o-a
+03_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: aabc result_expr: $1-$2-$3 expected_results a--c
+04_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: ixyjp result_expr: $1-$2-$3 expected_results x-y-p
+05_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: a result_expr: $1 expected_results a
+06_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: b result_expr: $1 expected_results b
+07_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: c result_expr: $1 expected_results c
+08_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: d result_expr: $1 expected_results d
+09_y: OK regex: (.)(?|(.)(.)x|(.)d)(.) parsed_regex: (.)(?|(.)(.)x|(.)d)(.) str: abcde result_expr: $1-$2-$3-$4-$5- expected_results b-c--e--
+10_y: OK regex: (\N)(?|(\N)(\N)x|(\N)d)(\N) parsed_regex: (\N)(?|(\N)(\N)x|(\N)d)(\N) str: abcde result_expr: $1-$2-$3-$4-$5- expected_results b-c--e--
+11_yM: OK regex: (?|(?<foo>x)) parsed_regex: (?|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+12_yM: OK regex: (?|(?<foo>x)|(?<bar>y)) parsed_regex: (?|(?<foo>x)|(?<bar>y)) str: x result_expr: $+{foo} expected_results x
+13_yM: OK regex: (?|(?<bar>y)|(?<foo>x)) parsed_regex: (?|(?<bar>y)|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+14_yM: OK regex: (?<bar>)(?|(?<foo>x)) parsed_regex: (?<bar>)(?|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+15_y: OK regex: (?|(b)|()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(a)) parsed_regex: (?|(b)|()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(a)) str: a result_expr: $& expected_results a
+
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_18_branch_reset.cpp.output b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_18_branch_reset.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_19_lookahead.cpp.execution b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_19_lookahead.cpp.execution
new file mode 100644
index 000000000..7b34914b1
--- /dev/null
+++ b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_19_lookahead.cpp.execution
@@ -0,0 +1,77 @@
+Running tests_19_lookahead:
+01_y: OK regex: a(?!b). parsed_regex: a(?!b). str: abad result_expr: $& expected_results ad
+02_y: OK regex: (?=)a parsed_regex: (?=)a str: a result_expr: $& expected_results a
+03_y: OK regex: a(?=d). parsed_regex: a(?=d). str: abad result_expr: $& expected_results ad
+04_y: OK regex: a(?=c|d). parsed_regex: a(?=c|d). str: abad result_expr: $& expected_results ad
+05_y: OK regex: ^(?:b|a(?=(.)))*\1 parsed_regex: ^(?:b|a(?=(.)))*\1 str: abc result_expr: $& expected_results ab
+06_y: OK regex: (?=(a+?))(\1ab) parsed_regex: (?=(a+?))(\1ab) str: aaab result_expr: $2 expected_results aab
+07_n: OK regex: ^(?=(a+?))\1ab parsed_regex: ^(?=(a+?))\1ab str: aaab result_expr: - expected_results -
+08_y: OK regex: (?=(a+?))(\1ab) parsed_regex: (?=(a+?))(\1ab) str: aaab result_expr: $2 expected_results aab
+09_n: OK regex: ^(?=(a+?))\1ab parsed_regex: ^(?=(a+?))\1ab str: aaab result_expr: - expected_results -
+10_y: OK regex: (.*)(?=c) parsed_regex: (.*)(?=c) str: abcd result_expr: $1 expected_results ab
+11_yB: OK regex: (.*)(?=c)c parsed_regex: (.*)(?=c)c str: abcd result_expr: $1 expected_results ab
+12_y: OK regex: (.*)(?=b|c) parsed_regex: (.*)(?=b|c) str: abcd result_expr: $1 expected_results ab
+13_y: OK regex: (.*)(?=b|c)c parsed_regex: (.*)(?=b|c)c str: abcd result_expr: $1 expected_results ab
+14_y: OK regex: (.*)(?=c|b) parsed_regex: (.*)(?=c|b) str: abcd result_expr: $1 expected_results ab
+15_y: OK regex: (.*)(?=c|b)c parsed_regex: (.*)(?=c|b)c str: abcd result_expr: $1 expected_results ab
+16_y: OK regex: (.*)(?=[bc]) parsed_regex: (.*)(?=[bc]) str: abcd result_expr: $1 expected_results ab
+17_yB: OK regex: (.*)(?=[bc])c parsed_regex: (.*)(?=[bc])c str: abcd result_expr: $1 expected_results ab
+18_y: OK regex: (.*?)(?=c) parsed_regex: (.*?)(?=c) str: abcd result_expr: $1 expected_results ab
+19_yB: OK regex: (.*?)(?=c)c parsed_regex: (.*?)(?=c)c str: abcd result_expr: $1 expected_results ab
+20_y: OK regex: (.*?)(?=b|c) parsed_regex: (.*?)(?=b|c) str: abcd result_expr: $1 expected_results a
+21_y: OK regex: (.*?)(?=b|c)c parsed_regex: (.*?)(?=b|c)c str: abcd result_expr: $1 expected_results ab
+22_y: OK regex: (.*?)(?=c|b) parsed_regex: (.*?)(?=c|b) str: abcd result_expr: $1 expected_results a
+23_y: OK regex: (.*?)(?=c|b)c parsed_regex: (.*?)(?=c|b)c str: abcd result_expr: $1 expected_results ab
+24_y: OK regex: (.*?)(?=[bc]) parsed_regex: (.*?)(?=[bc]) str: abcd result_expr: $1 expected_results a
+25_yB: OK regex: (.*?)(?=[bc])c parsed_regex: (.*?)(?=[bc])c str: abcd result_expr: $1 expected_results ab
+26_y: OK regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) parsed_regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) str: aaaaaaaa result_expr: $1 expected_results aaaaaaa
+27_y: OK regex: a(?!b(?!c))(..) parsed_regex: a(?!b(?!c))(..) str: abababc result_expr: $1 expected_results bc
+28_y: OK regex: a(?!b(?=a))(..) parsed_regex: a(?!b(?=a))(..) str: abababc result_expr: $1 expected_results bc
+37_y: OK regex: X(\w+)(?=\s)|X(\w+) parsed_regex: X(\w+)(?=\s)|X(\w+) str: Xab result_expr: [$1-$2] expected_results [-ab]
+38_y: OK regex: ^a*(?=b)b parsed_regex: ^a*(?=b)b str: ab result_expr: $& expected_results ab
+39_y: OK regex: '(?!\A)x'm parsed_regex: '(?!\A)x'm str: a
+xb
+ result_expr: - expected_results -
+40_n: OK regex: '^(o)(?!.*\1)'i parsed_regex: '^(o)(?!.*\1)'i str: Oo result_expr: - expected_results -
+41_n: OK regex: .*a(?!(b|cd)*e).*f parsed_regex: .*a(?!(b|cd)*e).*f str: ......abef result_expr: - expected_results -
+42_y: OK regex: ^(a*?)(?!(aa|aaaa)*$) parsed_regex: ^(a*?)(?!(aa|aaaa)*$) str: aaaaaaaaaaaaaaaaaaaa result_expr: $1 expected_results a
+43_y: OK regex: (?!)+?|(.{2,4}) parsed_regex: (?!)+?|(.{2,4}) str: abcde result_expr: $1 expected_results abcd
+44_y: OK regex: ^(a*?)(?!(a{6}|a{5})*$) parsed_regex: ^(a*?)(?!(a{6}|a{5})*$) str: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa result_expr: $+[1] expected_results 12
+45_y: OK regex: a(?!b(?!c(?!d(?!e))))...(.) parsed_regex: a(?!b(?!c(?!d(?!e))))...(.) str: abxabcdxabcde result_expr: $1 expected_results e
+46_y: OK regex: X(?!b+(?!(c+)*(?!(c+)*d))).*X parsed_regex: X(?!b+(?!(c+)*(?!(c+)*d))).*X str: aXbbbbbbbcccccccccccccaaaX result_expr: - expected_results -
+47_y: OK regex: ((?s).)c(?!.) parsed_regex: ((?s).)c(?!.) str: a
+b
+c
+ result_expr: $1 expected_results 
+
+48_y: OK regex: ((?s).)c(?!.) parsed_regex: ((?s).)c(?!.) str: a
+b
+c
+ result_expr: $1:$& expected_results 
+:
+c
+49_y: OK regex: ((?s)b.)c(?!.) parsed_regex: ((?s)b.)c(?!.) str: a
+b
+c
+ result_expr: $1 expected_results b
+
+50_y: OK regex: ((?s)b.)c(?!.) parsed_regex: ((?s)b.)c(?!.) str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+51_y: OK regex: ((?s)b.)c(?!\N) parsed_regex: ((?s)b.)c(?!\N) str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+52_y: OK regex: '(b.)c(?!\N)'s parsed_regex: '(b.)c(?!\N)'s str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+53_n: OK regex: a*(?!) parsed_regex: a*(?!) str: aaaab result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-regex_19_lookahead.cpp.output b/regression-tests/test-results/gcc-14-c++2b/pure2-regex_19_lookahead.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_01_char_matcher.cpp.execution b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_01_char_matcher.cpp.execution
new file mode 100644
index 000000000..af124736e
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_01_char_matcher.cpp.execution
@@ -0,0 +1,14 @@
+Running tests_01_char_matcher:
+01_y: OK regex: abc parsed_regex: abc str: abc result_expr: $& expected_results abc
+02_y: OK regex: abc parsed_regex: abc str: abc result_expr: $-[0] expected_results 0
+03_y: OK regex: abc parsed_regex: abc str: abc result_expr: $+[0] expected_results 3
+04_n: OK regex: abc parsed_regex: abc str: xbc result_expr: - expected_results -
+05_n: OK regex: abc parsed_regex: abc str: axc result_expr: - expected_results -
+06_n: OK regex: abc parsed_regex: abc str: abx result_expr: - expected_results -
+07_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $& expected_results abc
+08_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $-[0] expected_results 1
+09_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $+[0] expected_results 4
+10_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $& expected_results abc
+11_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $-[0] expected_results 2
+12_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $+[0] expected_results 5
+
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_01_char_matcher.cpp.output b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_01_char_matcher.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_02_ranges.cpp.execution b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_02_ranges.cpp.execution
new file mode 100644
index 000000000..dc0b36002
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_02_ranges.cpp.execution
@@ -0,0 +1,42 @@
+Running tests_02_ranges:
+01_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $& expected_results abc
+02_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $-[0] expected_results 0
+03_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $+[0] expected_results 3
+04_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $& expected_results abc
+05_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $-[0] expected_results 0
+06_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $+[0] expected_results 3
+07_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $& expected_results abbc
+08_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $-[0] expected_results 0
+09_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $+[0] expected_results 4
+10_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $& expected_results abbbbc
+11_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $-[0] expected_results 0
+12_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $+[0] expected_results 6
+13_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $& expected_results abbbbc
+14_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $-[0] expected_results 0
+15_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $+[0] expected_results 6
+16_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $& expected_results abbc
+17_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $-[0] expected_results 0
+18_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $+[0] expected_results 4
+19_n: OK regex: ab+bc parsed_regex: ab+bc str: abc result_expr: - expected_results -
+20_n: OK regex: ab+bc parsed_regex: ab+bc str: abq result_expr: - expected_results -
+21_n: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abq result_expr: - expected_results -
+22_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $& expected_results abbbbc
+23_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $-[0] expected_results 0
+24_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $+[0] expected_results 6
+25_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $& expected_results abbbbc
+26_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $-[0] expected_results 0
+27_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $+[0] expected_results 6
+28_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $& expected_results abbbbc
+29_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $-[0] expected_results 0
+30_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $+[0] expected_results 6
+31_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $& expected_results abbbbc
+32_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $-[0] expected_results 0
+33_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $+[0] expected_results 6
+34_n: OK regex: ab{4,5}bc parsed_regex: ab{4,5}bc str: abbbbc result_expr: - expected_results -
+35_y: OK regex: ab?bc parsed_regex: ab?bc str: abbc result_expr: $& expected_results abbc
+36_y: OK regex: ab?bc parsed_regex: ab?bc str: abc result_expr: $& expected_results abc
+37_y: OK regex: ab{0,1}bc parsed_regex: ab{0,1}bc str: abc result_expr: $& expected_results abc
+38_n: OK regex: ab?bc parsed_regex: ab?bc str: abbbbc result_expr: - expected_results -
+39_y: OK regex: ab?c parsed_regex: ab?c str: abc result_expr: $& expected_results abc
+40_y: OK regex: ab{0,1}c parsed_regex: ab{0,1}c str: abc result_expr: $& expected_results abc
+
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_02_ranges.cpp.output b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_02_ranges.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_03_wildcard.cpp.execution b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_03_wildcard.cpp.execution
new file mode 100644
index 000000000..f3f0ea9cc
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_03_wildcard.cpp.execution
@@ -0,0 +1,22 @@
+Running tests_03_wildcard:
+01_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $& expected_results a
+02_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $-[0] expected_results 0
+03_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $+[0] expected_results 1
+04_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $& expected_results abbb
+05_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $-[0] expected_results 0
+06_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+07_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $& expected_results a
+08_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $-[0] expected_results 0
+09_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $+[0] expected_results 1
+10_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $& expected_results abbb
+11_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $-[0] expected_results 0
+12_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+13_y: OK Warning: Parsed regex does not match. regex: \N{ 3 , 4 } parsed_regex: \N{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+14_y: OK regex: a.c parsed_regex: a.c str: abc result_expr: $& expected_results abc
+15_y: OK regex: a.c parsed_regex: a.c str: axc result_expr: $& expected_results axc
+16_y: OK regex: a\Nc parsed_regex: a\Nc str: abc result_expr: $& expected_results abc
+17_y: OK regex: a.*c parsed_regex: a.*c str: axyzc result_expr: $& expected_results axyzc
+18_y: OK regex: a\N*c parsed_regex: a\N*c str: axyzc result_expr: $& expected_results axyzc
+19_n: OK regex: a.*c parsed_regex: a.*c str: axyzd result_expr: - expected_results -
+20_n: OK regex: a\N*c parsed_regex: a\N*c str: axyzd result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_03_wildcard.cpp.output b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_03_wildcard.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_04_start_end.cpp.execution b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_04_start_end.cpp.execution
new file mode 100644
index 000000000..6fef36434
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_04_start_end.cpp.execution
@@ -0,0 +1,11 @@
+Running tests_04_start_end:
+01_y: OK regex: ^abc$ parsed_regex: ^abc$ str: abc result_expr: $& expected_results abc
+02_n: OK regex: ^abc$ parsed_regex: ^abc$ str: abcc result_expr: - expected_results -
+03_y: OK regex: ^abc parsed_regex: ^abc str: abcc result_expr: $& expected_results abc
+04_n: OK regex: ^abc$ parsed_regex: ^abc$ str: aabc result_expr: - expected_results -
+05_y: OK regex: abc$ parsed_regex: abc$ str: aabc result_expr: $& expected_results abc
+06_n: OK regex: abc$ parsed_regex: abc$ str: aabcd result_expr: - expected_results -
+07_y: OK regex: ^ parsed_regex: ^ str: abc result_expr: $& expected_results 
+08_y: OK regex: $ parsed_regex: $ str: abc result_expr: $& expected_results 
+09_n: OK regex: $b parsed_regex: $b str: b result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_04_start_end.cpp.output b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_04_start_end.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_05_classes.cpp.execution b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_05_classes.cpp.execution
new file mode 100644
index 000000000..306bf3395
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_05_classes.cpp.execution
@@ -0,0 +1,21 @@
+Running tests_05_classes:
+01_n: OK regex: a[bc]d parsed_regex: a[bc]d str: abc result_expr: - expected_results -
+02_y: OK regex: a[bc]d parsed_regex: a[bc]d str: abd result_expr: $& expected_results abd
+03_y: OK regex: a[b]d parsed_regex: a[b]d str: abd result_expr: $& expected_results abd
+04_y: OK regex: [a][b][d] parsed_regex: [a][b][d] str: abd result_expr: $& expected_results abd
+05_y: OK regex: .[b]. parsed_regex: .[b]. str: abd result_expr: $& expected_results abd
+06_n: OK regex: .[b]. parsed_regex: .[b]. str: aBd result_expr: - expected_results -
+07_n: OK regex: a[b-d]e parsed_regex: a[b-d]e str: abd result_expr: - expected_results -
+08_y: OK regex: a[b-d]e parsed_regex: a[b-d]e str: ace result_expr: $& expected_results ace
+09_y: OK regex: a[b-d] parsed_regex: a[b-d] str: aac result_expr: $& expected_results ac
+10_y: OK regex: a[-b] parsed_regex: a[-b] str: a- result_expr: $& expected_results a-
+11_y: OK regex: a[b-] parsed_regex: a[b-] str: a- result_expr: $& expected_results a-
+12_y: OK regex: a] parsed_regex: a] str: a] result_expr: $& expected_results a]
+13_y: OK regex: a[]]b parsed_regex: a[]]b str: a]b result_expr: $& expected_results a]b
+14_y: OK regex: a[^bc]d parsed_regex: a[^bc]d str: aed result_expr: $& expected_results aed
+15_n: OK regex: a[^bc]d parsed_regex: a[^bc]d str: abd result_expr: - expected_results -
+16_y: OK regex: a[^-b]c parsed_regex: a[^-b]c str: adc result_expr: $& expected_results adc
+17_n: OK regex: a[^-b]c parsed_regex: a[^-b]c str: a-c result_expr: - expected_results -
+18_n: OK regex: a[^]b]c parsed_regex: a[^]b]c str: a]c result_expr: - expected_results -
+19_y: OK regex: a[^]b]c parsed_regex: a[^]b]c str: adc result_expr: $& expected_results adc
+
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_05_classes.cpp.output b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_05_classes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_06_boundaries.cpp.execution b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_06_boundaries.cpp.execution
new file mode 100644
index 000000000..420a4c587
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_06_boundaries.cpp.execution
@@ -0,0 +1,19 @@
+Running tests_06_boundaries:
+01_y: OK regex: \ba\b parsed_regex: \ba\b str: a- result_expr: - expected_results -
+02_y: OK regex: \ba\b parsed_regex: \ba\b str: -a result_expr: - expected_results -
+03_y: OK regex: \ba\b parsed_regex: \ba\b str: -a- result_expr: - expected_results -
+04_n: OK regex: \by\b parsed_regex: \by\b str: xy result_expr: - expected_results -
+05_n: OK regex: \by\b parsed_regex: \by\b str: yz result_expr: - expected_results -
+06_n: OK regex: \by\b parsed_regex: \by\b str: xyz result_expr: - expected_results -
+07_n: OK regex: \Ba\B parsed_regex: \Ba\B str: a- result_expr: - expected_results -
+08_n: OK regex: \Ba\B parsed_regex: \Ba\B str: -a result_expr: - expected_results -
+09_n: OK regex: \Ba\B parsed_regex: \Ba\B str: -a- result_expr: - expected_results -
+10_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: - expected_results -
+11_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: $-[0] expected_results 1
+12_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: $+[0] expected_results 2
+13_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: - expected_results -
+14_y: OK regex: \by\B parsed_regex: \by\B str: yz result_expr: - expected_results -
+15_y: OK regex: \By\B parsed_regex: \By\B str: xyz result_expr: - expected_results -
+16_n: OK regex: \b parsed_regex: \b str:  result_expr: - expected_results -
+17_y: OK regex: \B parsed_regex: \B str:  result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_06_boundaries.cpp.output b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_06_boundaries.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_07_short_classes.cpp.execution b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_07_short_classes.cpp.execution
new file mode 100644
index 000000000..519c05f92
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_07_short_classes.cpp.execution
@@ -0,0 +1,26 @@
+Running tests_07_short_classes:
+01_y: OK regex: \w parsed_regex: \w str: a result_expr: - expected_results -
+02_n: OK regex: \w parsed_regex: \w str: - result_expr: - expected_results -
+03_n: OK regex: \W parsed_regex: \W str: a result_expr: - expected_results -
+04_y: OK regex: \W parsed_regex: \W str: - result_expr: - expected_results -
+05_y: OK regex: a\sb parsed_regex: a\sb str: a b result_expr: - expected_results -
+06_n: OK regex: a\sb parsed_regex: a\sb str: a-b result_expr: - expected_results -
+07_n: OK regex: a\Sb parsed_regex: a\Sb str: a b result_expr: - expected_results -
+08_y: OK regex: a\Sb parsed_regex: a\Sb str: a-b result_expr: - expected_results -
+09_y: OK regex: \d parsed_regex: \d str: 1 result_expr: - expected_results -
+10_n: OK regex: \d parsed_regex: \d str: - result_expr: - expected_results -
+11_n: OK regex: \D parsed_regex: \D str: 1 result_expr: - expected_results -
+12_y: OK regex: \D parsed_regex: \D str: - result_expr: - expected_results -
+13_y: OK regex: [\w] parsed_regex: [\w] str: a result_expr: - expected_results -
+14_n: OK regex: [\w] parsed_regex: [\w] str: - result_expr: - expected_results -
+15_n: OK regex: [\W] parsed_regex: [\W] str: a result_expr: - expected_results -
+16_y: OK regex: [\W] parsed_regex: [\W] str: - result_expr: - expected_results -
+17_y: OK regex: a[\s]b parsed_regex: a[\s]b str: a b result_expr: - expected_results -
+18_n: OK regex: a[\s]b parsed_regex: a[\s]b str: a-b result_expr: - expected_results -
+19_n: OK regex: a[\S]b parsed_regex: a[\S]b str: a b result_expr: - expected_results -
+20_y: OK regex: a[\S]b parsed_regex: a[\S]b str: a-b result_expr: - expected_results -
+21_y: OK regex: [\d] parsed_regex: [\d] str: 1 result_expr: - expected_results -
+22_n: OK regex: [\d] parsed_regex: [\d] str: - result_expr: - expected_results -
+23_n: OK regex: [\D] parsed_regex: [\D] str: 1 result_expr: - expected_results -
+24_y: OK regex: [\D] parsed_regex: [\D] str: - result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_07_short_classes.cpp.output b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_07_short_classes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_08_alternatives.cpp.execution b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_08_alternatives.cpp.execution
new file mode 100644
index 000000000..c12fd2afe
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_08_alternatives.cpp.execution
@@ -0,0 +1,4 @@
+Running tests_08_alternatives:
+01_y: OK regex: ab|cd parsed_regex: ab|cd str: abc result_expr: $& expected_results ab
+02_y: OK regex: ab|cd parsed_regex: ab|cd str: abcd result_expr: $& expected_results ab
+
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_08_alternatives.cpp.output b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_08_alternatives.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_09_groups.cpp.execution b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_09_groups.cpp.execution
new file mode 100644
index 000000000..05df860f9
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_09_groups.cpp.execution
@@ -0,0 +1,13 @@
+Running tests_09_groups:
+01_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $&-$1 expected_results ef-
+02_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $-[0] expected_results 1
+03_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $+[0] expected_results 3
+04_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $-[1] expected_results 1
+05_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $+[1] expected_results 1
+06_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $&-$1-$2 expected_results a-a-a
+07_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $-[0]-$-[1]-$-[2] expected_results 0-0-0
+08_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $+[0]-$+[1]-$+[2] expected_results 1-1-1
+09_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $&-$1-$2 expected_results abc-a-c
+10_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $-[0]-$-[1]-$-[2] expected_results 0-0-2
+11_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $+[0]-$+[1]-$+[2] expected_results 3-1-3
+
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_09_groups.cpp.output b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_09_groups.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_10_escapes.cpp.execution b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_10_escapes.cpp.execution
new file mode 100644
index 000000000..fe6e6efc9
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_10_escapes.cpp.execution
@@ -0,0 +1,39 @@
+Running tests_10_escapes:
+01_y: OK regex: a\(b parsed_regex: a\(b str: a(b result_expr: $&-$1 expected_results a(b-
+02_y: OK regex: a\(*b parsed_regex: a\(*b str: ab result_expr: $& expected_results ab
+03_y: OK regex: a\(*b parsed_regex: a\(*b str: a((b result_expr: $& expected_results a((b
+04_y: OK regex: a\\b parsed_regex: a\\b str: a\b result_expr: $& expected_results a\b
+05_y: OK regex: foo(\h+)bar parsed_regex: foo(\h+)bar str: foo	bar result_expr: $1 expected_results 	
+06_y: OK regex: (\H+)(\h) parsed_regex: (\H+)(\h) str: foo	bar result_expr: $1-$2 expected_results foo-	
+07_y: OK regex: (\h+)(\H) parsed_regex: (\h+)(\H) str: foo	bar result_expr: $1-$2 expected_results 	-b
+08_y: OK regex: foo(\h)bar parsed_regex: foo(\h)bar str: foo	bar result_expr: $1 expected_results 	
+09_y: OK regex: (\H)(\h) parsed_regex: (\H)(\h) str: foo	bar result_expr: $1-$2 expected_results o-	
+10_y: OK regex: (\h)(\H) parsed_regex: (\h)(\H) str: foo	bar result_expr: $1-$2 expected_results 	-b
+11_y: OK regex: foo(\v+)bar parsed_regex: foo(\v+)bar str: foo
+
+
+bar result_expr: $1 expected_results 
+
+
+
+12_y: OK regex: (\V+)(\v) parsed_regex: (\V+)(\v) str: foo
+
+
+bar result_expr: $1-$2 expected_results foo-
+13_y: OK regex: (\v+)(\V) parsed_regex: (\v+)(\V) str: foo
+
+
+bar result_expr: $1-$2 expected_results 
+
+
+-b
+14_y: OK regex: foo(\v)bar parsed_regex: foo(\v)bar str: foo
bar result_expr: $1 expected_results 
+15_y: OK regex: (\V)(\v) parsed_regex: (\V)(\v) str: foo
bar result_expr: $1-$2 expected_results o-
+16_y: OK regex: (\v)(\V) parsed_regex: (\v)(\V) str: foo
bar result_expr: $1-$2 expected_results 
-b
+17_y: OK regex: foo\t\n\r\f\a\ebar parsed_regex: foo\t\n\r\f\a\ebar str: foo	
+
bar result_expr: $& expected_results foo	
+
bar
+18_y: OK regex: foo\Kbar parsed_regex: foo\Kbar str: foobar result_expr: $& expected_results bar
+19_y: OK regex: \x41\x42 parsed_regex: \x41\x42 str: AB result_expr: $& expected_results AB
+20_y: OK regex: \101\o{102} parsed_regex: \101\o{102} str: AB result_expr: $& expected_results AB
+
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_10_escapes.cpp.output b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_10_escapes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_11_group_references.cpp.execution b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_11_group_references.cpp.execution
new file mode 100644
index 000000000..724d0085a
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_11_group_references.cpp.execution
@@ -0,0 +1,26 @@
+Running tests_11_group_references:
+01_y: OK regex: (foo)(\g-2) parsed_regex: (foo)(\g-2) str: foofoo result_expr: $1-$2 expected_results foo-foo
+02_y: OK regex: (foo)(\g-2)(foo)(\g-2) parsed_regex: (foo)(\g-2)(foo)(\g-2) str: foofoofoofoo result_expr: $1-$2-$3-$4 expected_results foo-foo-foo-foo
+03_y: OK regex: (([abc]+) \g-1)(([abc]+) \g{-1}) parsed_regex: (([abc]+) \g-1)(([abc]+) \g{-1}) str: abc abccba cba result_expr: $2-$4 expected_results abc-cba
+04_y: OK regex: (a)(b)(c)\g1\g2\g3 parsed_regex: (a)(b)(c)\g1\g2\g3 str: abcabc result_expr: $1$2$3 expected_results abc
+05_y: OK regex: /(?'n'foo) \g{n}/ parsed_regex: /(?'n'foo) \g{n}/ str: ..foo foo.. result_expr: $1 expected_results foo
+06_y: OK regex: /(?'n'foo) \g{ n }/ parsed_regex: /(?'n'foo) \g{ n }/ str: ..foo foo.. result_expr: $1 expected_results foo
+07_yM: OK regex: /(?'n'foo) \g{n}/ parsed_regex: /(?'n'foo) \g{n}/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+08_y: OK regex: /(?<n>foo) \g{n}/ parsed_regex: /(?<n>foo) \g{n}/ str: ..foo foo.. result_expr: $1 expected_results foo
+09_yM: OK regex: /(?<n>foo) \g{n}/ parsed_regex: /(?<n>foo) \g{n}/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+10_y: OK regex: /(?<as>as) (\w+) \g{as} (\w+)/ parsed_regex: /(?<as>as) (\w+) \g{as} (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+11_y: OK regex: /(?'n'foo) \k<n>/ parsed_regex: /(?'n'foo) \k<n>/ str: ..foo foo.. result_expr: $1 expected_results foo
+12_yM: OK regex: /(?'n'foo) \k<n>/ parsed_regex: /(?'n'foo) \k<n>/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+13_y: OK regex: /(?<n>foo) \k'n'/ parsed_regex: /(?<n>foo) \k'n'/ str: ..foo foo.. result_expr: $1 expected_results foo
+14_yM: OK regex: /(?<n>foo) \k'n'/ parsed_regex: /(?<n>foo) \k'n'/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+15_yM: OK regex: /(?'a1'foo) \k'a1'/ parsed_regex: /(?'a1'foo) \k'a1'/ str: ..foo foo.. result_expr: $+{a1} expected_results foo
+16_yM: OK regex: /(?<a1>foo) \k<a1>/ parsed_regex: /(?<a1>foo) \k<a1>/ str: ..foo foo.. result_expr: $+{a1} expected_results foo
+17_yM: OK regex: /(?'_'foo) \k'_'/ parsed_regex: /(?'_'foo) \k'_'/ str: ..foo foo.. result_expr: $+{_} expected_results foo
+18_yM: OK regex: /(?<_>foo) \k<_>/ parsed_regex: /(?<_>foo) \k<_>/ str: ..foo foo.. result_expr: $+{_} expected_results foo
+19_yM: OK regex: /(?'_0_'foo) \k'_0_'/ parsed_regex: /(?'_0_'foo) \k'_0_'/ str: ..foo foo.. result_expr: $+{_0_} expected_results foo
+20_yM: OK regex: /(?<_0_>foo) \k<_0_>/ parsed_regex: /(?<_0_>foo) \k<_0_>/ str: ..foo foo.. result_expr: $+{_0_} expected_results foo
+21_y: OK regex: /(?<as>as) (\w+) \k<as> (\w+)/ parsed_regex: /(?<as>as) (\w+) \k<as> (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+22_y: OK regex: /(?<as>as) (\w+) \k{as} (\w+)/ parsed_regex: /(?<as>as) (\w+) \k{as} (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+23_y: OK regex: /(?<as>as) (\w+) \k'as' (\w+)/ parsed_regex: /(?<as>as) (\w+) \k'as' (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+24_y: OK regex: /(?<as>as) (\w+) \k{ as } (\w+)/ parsed_regex: /(?<as>as) (\w+) \k{ as } (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_11_group_references.cpp.output b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_11_group_references.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_12_case_insensitive.cpp.execution b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_12_case_insensitive.cpp.execution
new file mode 100644
index 000000000..4939deb24
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_12_case_insensitive.cpp.execution
@@ -0,0 +1,121 @@
+Running tests_12_case_insensitive:
+01_y: OK regex: 'abc'i parsed_regex: 'abc'i str: ABC result_expr: $& expected_results ABC
+02_n: OK regex: 'abc'i parsed_regex: 'abc'i str: XBC result_expr: - expected_results -
+03_n: OK regex: 'abc'i parsed_regex: 'abc'i str: AXC result_expr: - expected_results -
+04_n: OK regex: 'abc'i parsed_regex: 'abc'i str: ABX result_expr: - expected_results -
+05_y: OK regex: 'abc'i parsed_regex: 'abc'i str: XABCY result_expr: $& expected_results ABC
+06_y: OK regex: 'abc'i parsed_regex: 'abc'i str: ABABC result_expr: $& expected_results ABC
+07_y: OK regex: 'ab*c'i parsed_regex: 'ab*c'i str: ABC result_expr: $& expected_results ABC
+08_y: OK regex: 'ab*bc'i parsed_regex: 'ab*bc'i str: ABC result_expr: $& expected_results ABC
+09_y: OK regex: 'ab*bc'i parsed_regex: 'ab*bc'i str: ABBC result_expr: $& expected_results ABBC
+10_y: OK regex: 'ab*?bc'i parsed_regex: 'ab*?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+11_y: OK regex: 'ab{0,}?bc'i parsed_regex: 'ab{0,}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+12_y: OK regex: 'ab+?bc'i parsed_regex: 'ab+?bc'i str: ABBC result_expr: $& expected_results ABBC
+13_n: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABC result_expr: - expected_results -
+14_n: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABQ result_expr: - expected_results -
+15_n: OK regex: 'ab{1,}bc'i parsed_regex: 'ab{1,}bc'i str: ABQ result_expr: - expected_results -
+16_y: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+17_y: OK regex: 'ab{1,}?bc'i parsed_regex: 'ab{1,}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+18_y: OK regex: 'ab{1,3}?bc'i parsed_regex: 'ab{1,3}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+19_y: OK regex: 'ab{3,4}?bc'i parsed_regex: 'ab{3,4}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+20_n: OK regex: 'ab{4,5}?bc'i parsed_regex: 'ab{4,5}?bc'i str: ABBBBC result_expr: - expected_results -
+21_y: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABBC result_expr: $& expected_results ABBC
+22_y: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABC result_expr: $& expected_results ABC
+23_y: OK regex: 'ab{0,1}?bc'i parsed_regex: 'ab{0,1}?bc'i str: ABC result_expr: $& expected_results ABC
+24_n: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABBBBC result_expr: - expected_results -
+25_y: OK regex: 'ab??c'i parsed_regex: 'ab??c'i str: ABC result_expr: $& expected_results ABC
+26_y: OK regex: 'ab{0,1}?c'i parsed_regex: 'ab{0,1}?c'i str: ABC result_expr: $& expected_results ABC
+27_y: OK regex: '^abc$'i parsed_regex: '^abc$'i str: ABC result_expr: $& expected_results ABC
+28_n: OK regex: '^abc$'i parsed_regex: '^abc$'i str: ABCC result_expr: - expected_results -
+29_y: OK regex: '^abc'i parsed_regex: '^abc'i str: ABCC result_expr: $& expected_results ABC
+30_n: OK regex: '^abc$'i parsed_regex: '^abc$'i str: AABC result_expr: - expected_results -
+31_y: OK regex: 'abc$'i parsed_regex: 'abc$'i str: AABC result_expr: $& expected_results ABC
+32_y: OK regex: '^'i parsed_regex: '^'i str: ABC result_expr: $& expected_results 
+33_y: OK regex: '$'i parsed_regex: '$'i str: ABC result_expr: $& expected_results 
+34_y: OK regex: 'a.c'i parsed_regex: 'a.c'i str: ABC result_expr: $& expected_results ABC
+35_y: OK regex: 'a.c'i parsed_regex: 'a.c'i str: AXC result_expr: $& expected_results AXC
+36_y: OK regex: 'a\Nc'i parsed_regex: 'a\Nc'i str: ABC result_expr: $& expected_results ABC
+37_y: OK regex: 'a.*?c'i parsed_regex: 'a.*?c'i str: AXYZC result_expr: $& expected_results AXYZC
+38_n: OK regex: 'a.*c'i parsed_regex: 'a.*c'i str: AXYZD result_expr: - expected_results -
+39_n: OK regex: 'a[bc]d'i parsed_regex: 'a[bc]d'i str: ABC result_expr: - expected_results -
+40_y: OK regex: 'a[bc]d'i parsed_regex: 'a[bc]d'i str: ABD result_expr: $& expected_results ABD
+41_n: OK regex: 'a[b-d]e'i parsed_regex: 'a[b-d]e'i str: ABD result_expr: - expected_results -
+42_y: OK regex: 'a[b-d]e'i parsed_regex: 'a[b-d]e'i str: ACE result_expr: $& expected_results ACE
+43_y: OK regex: 'a[b-d]'i parsed_regex: 'a[b-d]'i str: AAC result_expr: $& expected_results AC
+44_y: OK regex: 'a[-b]'i parsed_regex: 'a[-b]'i str: A- result_expr: $& expected_results A-
+45_y: OK regex: 'a[b-]'i parsed_regex: 'a[b-]'i str: A- result_expr: $& expected_results A-
+46_y: OK regex: 'a]'i parsed_regex: 'a]'i str: A] result_expr: $& expected_results A]
+47_y: OK regex: 'a[]]b'i parsed_regex: 'a[]]b'i str: A]B result_expr: $& expected_results A]B
+48_y: OK regex: 'a[^bc]d'i parsed_regex: 'a[^bc]d'i str: AED result_expr: $& expected_results AED
+49_n: OK regex: 'a[^bc]d'i parsed_regex: 'a[^bc]d'i str: ABD result_expr: - expected_results -
+50_y: OK regex: 'a[^-b]c'i parsed_regex: 'a[^-b]c'i str: ADC result_expr: $& expected_results ADC
+51_n: OK regex: 'a[^-b]c'i parsed_regex: 'a[^-b]c'i str: A-C result_expr: - expected_results -
+52_n: OK regex: 'a[^]b]c'i parsed_regex: 'a[^]b]c'i str: A]C result_expr: - expected_results -
+53_y: OK regex: 'a[^]b]c'i parsed_regex: 'a[^]b]c'i str: ADC result_expr: $& expected_results ADC
+54_y: OK regex: 'ab|cd'i parsed_regex: 'ab|cd'i str: ABC result_expr: $& expected_results AB
+55_y: OK regex: 'ab|cd'i parsed_regex: 'ab|cd'i str: ABCD result_expr: $& expected_results AB
+56_y: OK regex: '()ef'i parsed_regex: '()ef'i str: DEF result_expr: $&-$1 expected_results EF-
+57_n: OK regex: '$b'i parsed_regex: '$b'i str: B result_expr: - expected_results -
+58_y: OK regex: 'a\(b'i parsed_regex: 'a\(b'i str: A(B result_expr: $&-$1 expected_results A(B-
+59_y: OK regex: 'a\(*b'i parsed_regex: 'a\(*b'i str: AB result_expr: $& expected_results AB
+60_y: OK regex: 'a\(*b'i parsed_regex: 'a\(*b'i str: A((B result_expr: $& expected_results A((B
+61_y: OK regex: 'a\\b'i parsed_regex: 'a\\b'i str: A\B result_expr: $& expected_results A\B
+62_y: OK regex: '((a))'i parsed_regex: '((a))'i str: ABC result_expr: $&-$1-$2 expected_results A-A-A
+63_y: OK regex: '(a)b(c)'i parsed_regex: '(a)b(c)'i str: ABC result_expr: $&-$1-$2 expected_results ABC-A-C
+64_y: OK regex: 'a+b+c'i parsed_regex: 'a+b+c'i str: AABBABC result_expr: $& expected_results ABC
+65_y: OK regex: 'a{1,}b{1,}c'i parsed_regex: 'a{1,}b{1,}c'i str: AABBABC result_expr: $& expected_results ABC
+66_y: OK regex: 'a.+?c'i parsed_regex: 'a.+?c'i str: ABCABC result_expr: $& expected_results ABC
+67_y: OK regex: 'a.*?c'i parsed_regex: 'a.*?c'i str: ABCABC result_expr: $& expected_results ABC
+68_y: OK regex: 'a.{0,5}?c'i parsed_regex: 'a.{0,5}?c'i str: ABCABC result_expr: $& expected_results ABC
+69_y: OK regex: '(a+|b)*'i parsed_regex: '(a+|b)*'i str: AB result_expr: $&-$1 expected_results AB-B
+70_y: OK regex: '(a+|b){0,}'i parsed_regex: '(a+|b){0,}'i str: AB result_expr: $&-$1 expected_results AB-B
+71_y: OK regex: '(a+|b)+'i parsed_regex: '(a+|b)+'i str: AB result_expr: $&-$1 expected_results AB-B
+72_y: OK regex: '(a+|b){1,}'i parsed_regex: '(a+|b){1,}'i str: AB result_expr: $&-$1 expected_results AB-B
+73_y: OK regex: '(a+|b)?'i parsed_regex: '(a+|b)?'i str: AB result_expr: $&-$1 expected_results A-A
+74_y: OK regex: '(a+|b){0,1}'i parsed_regex: '(a+|b){0,1}'i str: AB result_expr: $&-$1 expected_results A-A
+75_y: OK regex: '(a+|b){0,1}?'i parsed_regex: '(a+|b){0,1}?'i str: AB result_expr: $&-$1 expected_results -
+76_y: OK regex: '[^ab]*'i parsed_regex: '[^ab]*'i str: CDE result_expr: $& expected_results CDE
+77_n: OK regex: 'abc'i parsed_regex: 'abc'i str:  result_expr: - expected_results -
+78_y: OK regex: 'a*'i parsed_regex: 'a*'i str:  result_expr: $& expected_results 
+79_y: OK regex: '([abc])*d'i parsed_regex: '([abc])*d'i str: ABBBCD result_expr: $&-$1 expected_results ABBBCD-C
+80_y: OK regex: '([abc])*bcd'i parsed_regex: '([abc])*bcd'i str: ABCD result_expr: $&-$1 expected_results ABCD-A
+81_y: OK regex: 'a|b|c|d|e'i parsed_regex: 'a|b|c|d|e'i str: E result_expr: $& expected_results E
+82_y: OK regex: '(a|b|c|d|e)f'i parsed_regex: '(a|b|c|d|e)f'i str: EF result_expr: $&-$1 expected_results EF-E
+83_y: OK regex: 'abcd*efg'i parsed_regex: 'abcd*efg'i str: ABCDEFG result_expr: $& expected_results ABCDEFG
+84_y: OK regex: 'ab*'i parsed_regex: 'ab*'i str: XABYABBBZ result_expr: $& expected_results AB
+85_y: OK regex: 'ab*'i parsed_regex: 'ab*'i str: XAYABBBZ result_expr: $& expected_results A
+86_y: OK regex: '(ab|cd)e'i parsed_regex: '(ab|cd)e'i str: ABCDE result_expr: $&-$1 expected_results CDE-CD
+87_y: OK regex: '[abhgefdc]ij'i parsed_regex: '[abhgefdc]ij'i str: HIJ result_expr: $& expected_results HIJ
+88_n: OK regex: '^(ab|cd)e'i parsed_regex: '^(ab|cd)e'i str: ABCDE result_expr: x$1y expected_results XY
+89_y: OK regex: '(abc|)ef'i parsed_regex: '(abc|)ef'i str: ABCDEF result_expr: $&-$1 expected_results EF-
+90_y: OK regex: '(a|b)c*d'i parsed_regex: '(a|b)c*d'i str: ABCD result_expr: $&-$1 expected_results BCD-B
+91_y: OK regex: '(ab|ab*)bc'i parsed_regex: '(ab|ab*)bc'i str: ABC result_expr: $&-$1 expected_results ABC-A
+92_y: OK regex: 'a([bc]*)c*'i parsed_regex: 'a([bc]*)c*'i str: ABC result_expr: $&-$1 expected_results ABC-BC
+93_y: OK regex: 'a([bc]*)(c*d)'i parsed_regex: 'a([bc]*)(c*d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-BC-D
+94_y: OK regex: 'a([bc]+)(c*d)'i parsed_regex: 'a([bc]+)(c*d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-BC-D
+95_y: OK regex: 'a([bc]*)(c+d)'i parsed_regex: 'a([bc]*)(c+d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-B-CD
+96_y: OK regex: 'a[bcd]*dcdcde'i parsed_regex: 'a[bcd]*dcdcde'i str: ADCDCDE result_expr: $& expected_results ADCDCDE
+97_n: OK regex: 'a[bcd]+dcdcde'i parsed_regex: 'a[bcd]+dcdcde'i str: ADCDCDE result_expr: - expected_results -
+98_y: OK regex: '(ab|a)b*c'i parsed_regex: '(ab|a)b*c'i str: ABC result_expr: $&-$1 expected_results ABC-AB
+99_y: OK regex: '((a)(b)c)(d)'i parsed_regex: '((a)(b)c)(d)'i str: ABCD result_expr: $1-$2-$3-$4 expected_results ABC-A-B-D
+100_y: OK regex: '[a-zA-Z_][a-zA-Z0-9_]*'i parsed_regex: '[a-zA-Z_][a-zA-Z0-9_]*'i str: ALPHA result_expr: $& expected_results ALPHA
+101_y: OK regex: '^a(bc+|b[eh])g|.h$'i parsed_regex: '^a(bc+|b[eh])g|.h$'i str: ABH result_expr: $&-$1 expected_results BH-
+102_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: EFFGZ result_expr: $&-$1-$2 expected_results EFFGZ-EFFGZ-
+103_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: IJ result_expr: $&-$1-$2 expected_results IJ-IJ-J
+104_n: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: EFFG result_expr: - expected_results -
+105_n: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: BCDD result_expr: - expected_results -
+106_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: REFFGZ result_expr: $&-$1-$2 expected_results EFFGZ-EFFGZ-
+107_y: OK regex: '((((((((((a))))))))))'i parsed_regex: '((((((((((a))))))))))'i str: A result_expr: $10 expected_results A
+108_y: OK regex: '((((((((((a))))))))))\10'i parsed_regex: '((((((((((a))))))))))\10'i str: AA result_expr: $& expected_results AA
+109_y: OK regex: '(((((((((a)))))))))'i parsed_regex: '(((((((((a)))))))))'i str: A result_expr: $& expected_results A
+110_n: OK regex: 'multiple words of text'i parsed_regex: 'multiple words of text'i str: UH-UH result_expr: - expected_results -
+111_y: OK regex: 'multiple words'i parsed_regex: 'multiple words'i str: MULTIPLE WORDS, YEAH result_expr: $& expected_results MULTIPLE WORDS
+112_y: OK regex: '(.*)c(.*)'i parsed_regex: '(.*)c(.*)'i str: ABCDE result_expr: $&-$1-$2 expected_results ABCDE-AB-DE
+113_y: OK regex: '\((.*), (.*)\)'i parsed_regex: '\((.*), (.*)\)'i str: (A, B) result_expr: ($2, $1) expected_results (B, A)
+114_n: OK regex: '[k]'i parsed_regex: '[k]'i str: AB result_expr: - expected_results -
+115_y: OK regex: 'abcd'i parsed_regex: 'abcd'i str: ABCD result_expr: $& expected_results ABCD
+116_y: OK regex: 'a(bc)d'i parsed_regex: 'a(bc)d'i str: ABCD result_expr: $1 expected_results BC
+117_y: OK regex: 'a[-]?c'i parsed_regex: 'a[-]?c'i str: AC result_expr: $& expected_results AC
+118_y: OK regex: '(abc)\1'i parsed_regex: '(abc)\1'i str: ABCABC result_expr: $1 expected_results ABC
+119_y: OK regex: '([a-c]*)\1'i parsed_regex: '([a-c]*)\1'i str: ABCABC result_expr: $1 expected_results ABC
+
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_12_case_insensitive.cpp.output b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_12_case_insensitive.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_13_posessive_modifier.cpp.execution b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_13_posessive_modifier.cpp.execution
new file mode 100644
index 000000000..916d1a084
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_13_posessive_modifier.cpp.execution
@@ -0,0 +1,50 @@
+Running tests_13_posessive_modifier:
+01_n: OK regex: a++a parsed_regex: a++a str: aaaaa result_expr: - expected_results -
+02_n: OK regex: a*+a parsed_regex: a*+a str: aaaaa result_expr: - expected_results -
+03_n: OK regex: a{1,5}+a parsed_regex: a{1,5}+a str: aaaaa result_expr: - expected_results -
+04_n: OK regex: a?+a parsed_regex: a?+a str: ab result_expr: - expected_results -
+05_y: OK regex: a++b parsed_regex: a++b str: aaaaab result_expr: $& expected_results aaaaab
+06_y: OK regex: a*+b parsed_regex: a*+b str: aaaaab result_expr: $& expected_results aaaaab
+07_y: OK regex: a{1,5}+b parsed_regex: a{1,5}+b str: aaaaab result_expr: $& expected_results aaaaab
+08_y: OK regex: a?+b parsed_regex: a?+b str: ab result_expr: $& expected_results ab
+09_n: OK regex: fooa++a parsed_regex: fooa++a str: fooaaaaa result_expr: - expected_results -
+10_n: OK regex: fooa*+a parsed_regex: fooa*+a str: fooaaaaa result_expr: - expected_results -
+11_n: OK regex: fooa{1,5}+a parsed_regex: fooa{1,5}+a str: fooaaaaa result_expr: - expected_results -
+12_n: OK regex: fooa?+a parsed_regex: fooa?+a str: fooab result_expr: - expected_results -
+13_y: OK regex: fooa++b parsed_regex: fooa++b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+14_y: OK regex: fooa*+b parsed_regex: fooa*+b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+15_y: OK regex: fooa{1,5}+b parsed_regex: fooa{1,5}+b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+16_y: OK regex: fooa?+b parsed_regex: fooa?+b str: fooab result_expr: $& expected_results fooab
+17_n: OK regex: (aA)++(aA) parsed_regex: (aA)++(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+18_n: OK regex: (aA|bB)++(aA|bB) parsed_regex: (aA|bB)++(aA|bB) str: aAaAbBaAbB result_expr: - expected_results aAaAbBaAbB
+19_n: OK regex: (aA)*+(aA) parsed_regex: (aA)*+(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+20_n: OK regex: (aA|bB)*+(aA|bB) parsed_regex: (aA|bB)*+(aA|bB) str: aAaAbBaAaA result_expr: - expected_results aAaAbBaAaA
+21_n: OK regex: (aA){1,5}+(aA) parsed_regex: (aA){1,5}+(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+22_n: OK regex: (aA|bB){1,5}+(aA|bB) parsed_regex: (aA|bB){1,5}+(aA|bB) str: aAaAbBaAaA result_expr: - expected_results aAaAbBaAaA
+23_n: OK regex: (aA)?+(aA) parsed_regex: (aA)?+(aA) str: aAb result_expr: - expected_results aAb
+24_n: OK regex: (aA|bB)?+(aA|bB) parsed_regex: (aA|bB)?+(aA|bB) str: bBb result_expr: - expected_results bBb
+25_y: OK regex: (aA)++b parsed_regex: (aA)++b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+26_y: OK regex: (aA|bB)++b parsed_regex: (aA|bB)++b str: aAbBaAaAbBb result_expr: $& expected_results aAbBaAaAbBb
+27_y: OK regex: (aA)*+b parsed_regex: (aA)*+b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+28_y: OK regex: (aA|bB)*+b parsed_regex: (aA|bB)*+b str: bBbBbBbBbBb result_expr: $& expected_results bBbBbBbBbBb
+29_y: OK regex: (aA){1,5}+b parsed_regex: (aA){1,5}+b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+30_y: OK regex: (aA|bB){1,5}+b parsed_regex: (aA|bB){1,5}+b str: bBaAbBaAbBb result_expr: $& expected_results bBaAbBaAbBb
+31_y: OK regex: (aA)?+b parsed_regex: (aA)?+b str: aAb result_expr: $& expected_results aAb
+32_y: OK regex: (aA|bB)?+b parsed_regex: (aA|bB)?+b str: bBb result_expr: $& expected_results bBb
+33_n: OK regex: foo(aA)++(aA) parsed_regex: foo(aA)++(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+34_n: OK regex: foo(aA|bB)++(aA|bB) parsed_regex: foo(aA|bB)++(aA|bB) str: foobBbBbBaAaA result_expr: - expected_results foobBbBbBaAaA
+35_n: OK regex: foo(aA)*+(aA) parsed_regex: foo(aA)*+(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+36_n: OK regex: foo(aA|bB)*+(aA|bB) parsed_regex: foo(aA|bB)*+(aA|bB) str: foobBaAbBaAaA result_expr: - expected_results foobBaAbBaAaA
+37_n: OK regex: foo(aA){1,5}+(aA) parsed_regex: foo(aA){1,5}+(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+38_n: OK regex: foo(aA|bB){1,5}+(aA|bB) parsed_regex: foo(aA|bB){1,5}+(aA|bB) str: fooaAbBbBaAaA result_expr: - expected_results fooaAbBbBaAaA
+39_n: OK regex: foo(aA)?+(aA) parsed_regex: foo(aA)?+(aA) str: fooaAb result_expr: - expected_results fooaAb
+40_n: OK regex: foo(aA|bB)?+(aA|bB) parsed_regex: foo(aA|bB)?+(aA|bB) str: foobBb result_expr: - expected_results foobBb
+41_y: OK regex: foo(aA)++b parsed_regex: foo(aA)++b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+42_y: OK regex: foo(aA|bB)++b parsed_regex: foo(aA|bB)++b str: foobBaAbBaAbBb result_expr: $& expected_results foobBaAbBaAbBb
+43_y: OK regex: foo(aA)*+b parsed_regex: foo(aA)*+b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+44_y: OK regex: foo(aA|bB)*+b parsed_regex: foo(aA|bB)*+b str: foobBbBaAaAaAb result_expr: $& expected_results foobBbBaAaAaAb
+45_y: OK regex: foo(aA){1,5}+b parsed_regex: foo(aA){1,5}+b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+46_y: OK regex: foo(aA|bB){1,5}+b parsed_regex: foo(aA|bB){1,5}+b str: foobBaAaAaAaAb result_expr: $& expected_results foobBaAaAaAaAb
+47_y: OK regex: foo(aA)?+b parsed_regex: foo(aA)?+b str: fooaAb result_expr: $& expected_results fooaAb
+48_y: OK regex: foo(aA|bB)?+b parsed_regex: foo(aA|bB)?+b str: foobBb result_expr: $& expected_results foobBb
+
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_13_posessive_modifier.cpp.output b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_13_posessive_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_14_multiline_modifier.cpp.execution b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_14_multiline_modifier.cpp.execution
new file mode 100644
index 000000000..9a12081ac
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_14_multiline_modifier.cpp.execution
@@ -0,0 +1,533 @@
+Running tests_14_multiline_modifier:
+01_y: OK regex: \Z parsed_regex: \Z str: a
+b
+ result_expr: $-[0] expected_results 3
+02_y: OK regex: \z parsed_regex: \z str: a
+b
+ result_expr: $-[0] expected_results 4
+03_y: OK regex: $ parsed_regex: $ str: a
+b
+ result_expr: $-[0] expected_results 3
+04_y: OK regex: \Z parsed_regex: \Z str: b
+a
+ result_expr: $-[0] expected_results 3
+05_y: OK regex: \z parsed_regex: \z str: b
+a
+ result_expr: $-[0] expected_results 4
+06_y: OK regex: $ parsed_regex: $ str: b
+a
+ result_expr: $-[0] expected_results 3
+07_y: OK regex: \Z parsed_regex: \Z str: b
+a result_expr: $-[0] expected_results 3
+08_y: OK regex: \z parsed_regex: \z str: b
+a result_expr: $-[0] expected_results 3
+09_y: OK regex: $ parsed_regex: $ str: b
+a result_expr: $-[0] expected_results 3
+10_y: OK regex: '\Z'm parsed_regex: '\Z'm str: a
+b
+ result_expr: $-[0] expected_results 3
+11_y: OK regex: '\z'm parsed_regex: '\z'm str: a
+b
+ result_expr: $-[0] expected_results 4
+12_y: OK regex: '$'m parsed_regex: '$'m str: a
+b
+ result_expr: $-[0] expected_results 1
+13_y: OK regex: '\Z'm parsed_regex: '\Z'm str: b
+a
+ result_expr: $-[0] expected_results 3
+14_y: OK regex: '\z'm parsed_regex: '\z'm str: b
+a
+ result_expr: $-[0] expected_results 4
+15_y: OK regex: '$'m parsed_regex: '$'m str: b
+a
+ result_expr: $-[0] expected_results 1
+16_y: OK regex: '\Z'm parsed_regex: '\Z'm str: b
+a result_expr: $-[0] expected_results 3
+17_y: OK regex: '\z'm parsed_regex: '\z'm str: b
+a result_expr: $-[0] expected_results 3
+18_y: OK regex: '$'m parsed_regex: '$'m str: b
+a result_expr: $-[0] expected_results 1
+19_n: OK regex: a\Z parsed_regex: a\Z str: a
+b
+ result_expr: - expected_results -
+20_n: OK regex: a\z parsed_regex: a\z str: a
+b
+ result_expr: - expected_results -
+21_n: OK regex: a$ parsed_regex: a$ str: a
+b
+ result_expr: - expected_results -
+22_y: OK regex: a\Z parsed_regex: a\Z str: b
+a
+ result_expr: $-[0] expected_results 2
+23_n: OK regex: a\z parsed_regex: a\z str: b
+a
+ result_expr: - expected_results -
+24_y: OK regex: a$ parsed_regex: a$ str: b
+a
+ result_expr: $-[0] expected_results 2
+25_y: OK regex: a\Z parsed_regex: a\Z str: b
+a result_expr: $-[0] expected_results 2
+26_y: OK regex: a\z parsed_regex: a\z str: b
+a result_expr: $-[0] expected_results 2
+27_y: OK regex: a$ parsed_regex: a$ str: b
+a result_expr: $-[0] expected_results 2
+28_n: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: a
+b
+ result_expr: - expected_results -
+29_n: OK regex: 'a\z'm parsed_regex: 'a\z'm str: a
+b
+ result_expr: - expected_results -
+30_y: OK regex: 'a$'m parsed_regex: 'a$'m str: a
+b
+ result_expr: $-[0] expected_results 0
+31_y: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: b
+a
+ result_expr: $-[0] expected_results 2
+32_n: OK regex: 'a\z'm parsed_regex: 'a\z'm str: b
+a
+ result_expr: - expected_results -
+33_y: OK regex: 'a$'m parsed_regex: 'a$'m str: b
+a
+ result_expr: $-[0] expected_results 2
+34_y: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: b
+a result_expr: $-[0] expected_results 2
+35_y: OK regex: 'a\z'm parsed_regex: 'a\z'm str: b
+a result_expr: $-[0] expected_results 2
+36_y: OK regex: 'a$'m parsed_regex: 'a$'m str: b
+a result_expr: $-[0] expected_results 2
+37_n: OK regex: aa\Z parsed_regex: aa\Z str: aa
+b
+ result_expr: - expected_results -
+38_n: OK regex: aa\z parsed_regex: aa\z str: aa
+b
+ result_expr: - expected_results -
+39_n: OK regex: aa$ parsed_regex: aa$ str: aa
+b
+ result_expr: - expected_results -
+40_y: OK regex: aa\Z parsed_regex: aa\Z str: b
+aa
+ result_expr: $-[0] expected_results 2
+41_n: OK regex: aa\z parsed_regex: aa\z str: b
+aa
+ result_expr: - expected_results -
+42_y: OK regex: aa$ parsed_regex: aa$ str: b
+aa
+ result_expr: $-[0] expected_results 2
+43_y: OK regex: aa\Z parsed_regex: aa\Z str: b
+aa result_expr: $-[0] expected_results 2
+44_y: OK regex: aa\z parsed_regex: aa\z str: b
+aa result_expr: $-[0] expected_results 2
+45_y: OK regex: aa$ parsed_regex: aa$ str: b
+aa result_expr: $-[0] expected_results 2
+46_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: aa
+b
+ result_expr: - expected_results -
+47_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: aa
+b
+ result_expr: - expected_results -
+48_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: aa
+b
+ result_expr: $-[0] expected_results 0
+49_y: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+aa
+ result_expr: $-[0] expected_results 2
+50_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+aa
+ result_expr: - expected_results -
+51_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+aa
+ result_expr: $-[0] expected_results 2
+52_y: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+aa result_expr: $-[0] expected_results 2
+53_y: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+aa result_expr: $-[0] expected_results 2
+54_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+aa result_expr: $-[0] expected_results 2
+55_n: OK regex: aa\Z parsed_regex: aa\Z str: ac
+b
+ result_expr: - expected_results -
+56_n: OK regex: aa\z parsed_regex: aa\z str: ac
+b
+ result_expr: - expected_results -
+57_n: OK regex: aa$ parsed_regex: aa$ str: ac
+b
+ result_expr: - expected_results -
+58_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ac
+ result_expr: - expected_results -
+59_n: OK regex: aa\z parsed_regex: aa\z str: b
+ac
+ result_expr: - expected_results -
+60_n: OK regex: aa$ parsed_regex: aa$ str: b
+ac
+ result_expr: - expected_results -
+61_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ac result_expr: - expected_results -
+62_n: OK regex: aa\z parsed_regex: aa\z str: b
+ac result_expr: - expected_results -
+63_n: OK regex: aa$ parsed_regex: aa$ str: b
+ac result_expr: - expected_results -
+64_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: ac
+b
+ result_expr: - expected_results -
+65_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: ac
+b
+ result_expr: - expected_results -
+66_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: ac
+b
+ result_expr: - expected_results -
+67_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ac
+ result_expr: - expected_results -
+68_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ac
+ result_expr: - expected_results -
+69_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ac
+ result_expr: - expected_results -
+70_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ac result_expr: - expected_results -
+71_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ac result_expr: - expected_results -
+72_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ac result_expr: - expected_results -
+73_n: OK regex: aa\Z parsed_regex: aa\Z str: ca
+b
+ result_expr: - expected_results -
+74_n: OK regex: aa\z parsed_regex: aa\z str: ca
+b
+ result_expr: - expected_results -
+75_n: OK regex: aa$ parsed_regex: aa$ str: ca
+b
+ result_expr: - expected_results -
+76_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ca
+ result_expr: - expected_results -
+77_n: OK regex: aa\z parsed_regex: aa\z str: b
+ca
+ result_expr: - expected_results -
+78_n: OK regex: aa$ parsed_regex: aa$ str: b
+ca
+ result_expr: - expected_results -
+79_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ca result_expr: - expected_results -
+80_n: OK regex: aa\z parsed_regex: aa\z str: b
+ca result_expr: - expected_results -
+81_n: OK regex: aa$ parsed_regex: aa$ str: b
+ca result_expr: - expected_results -
+82_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: ca
+b
+ result_expr: - expected_results -
+83_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: ca
+b
+ result_expr: - expected_results -
+84_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: ca
+b
+ result_expr: - expected_results -
+85_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ca
+ result_expr: - expected_results -
+86_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ca
+ result_expr: - expected_results -
+87_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ca
+ result_expr: - expected_results -
+88_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ca result_expr: - expected_results -
+89_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ca result_expr: - expected_results -
+90_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ca result_expr: - expected_results -
+91_n: OK regex: ab\Z parsed_regex: ab\Z str: ab
+b
+ result_expr: - expected_results -
+92_n: OK regex: ab\z parsed_regex: ab\z str: ab
+b
+ result_expr: - expected_results -
+93_n: OK regex: ab$ parsed_regex: ab$ str: ab
+b
+ result_expr: - expected_results -
+94_y: OK regex: ab\Z parsed_regex: ab\Z str: b
+ab
+ result_expr: $-[0] expected_results 2
+95_n: OK regex: ab\z parsed_regex: ab\z str: b
+ab
+ result_expr: - expected_results -
+96_y: OK regex: ab$ parsed_regex: ab$ str: b
+ab
+ result_expr: $-[0] expected_results 2
+97_y: OK regex: ab\Z parsed_regex: ab\Z str: b
+ab result_expr: $-[0] expected_results 2
+98_y: OK regex: ab\z parsed_regex: ab\z str: b
+ab result_expr: $-[0] expected_results 2
+99_y: OK regex: ab$ parsed_regex: ab$ str: b
+ab result_expr: $-[0] expected_results 2
+100_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ab
+b
+ result_expr: - expected_results -
+101_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ab
+b
+ result_expr: - expected_results -
+102_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ab
+b
+ result_expr: $-[0] expected_results 0
+103_y: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ab
+ result_expr: $-[0] expected_results 2
+104_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ab
+ result_expr: - expected_results -
+105_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ab
+ result_expr: $-[0] expected_results 2
+106_y: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ab result_expr: $-[0] expected_results 2
+107_y: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ab result_expr: $-[0] expected_results 2
+108_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ab result_expr: $-[0] expected_results 2
+109_n: OK regex: ab\Z parsed_regex: ab\Z str: ac
+b
+ result_expr: - expected_results -
+110_n: OK regex: ab\z parsed_regex: ab\z str: ac
+b
+ result_expr: - expected_results -
+111_n: OK regex: ab$ parsed_regex: ab$ str: ac
+b
+ result_expr: - expected_results -
+112_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ac
+ result_expr: - expected_results -
+113_n: OK regex: ab\z parsed_regex: ab\z str: b
+ac
+ result_expr: - expected_results -
+114_n: OK regex: ab$ parsed_regex: ab$ str: b
+ac
+ result_expr: - expected_results -
+115_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ac result_expr: - expected_results -
+116_n: OK regex: ab\z parsed_regex: ab\z str: b
+ac result_expr: - expected_results -
+117_n: OK regex: ab$ parsed_regex: ab$ str: b
+ac result_expr: - expected_results -
+118_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ac
+b
+ result_expr: - expected_results -
+119_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ac
+b
+ result_expr: - expected_results -
+120_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ac
+b
+ result_expr: - expected_results -
+121_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ac
+ result_expr: - expected_results -
+122_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ac
+ result_expr: - expected_results -
+123_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ac
+ result_expr: - expected_results -
+124_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ac result_expr: - expected_results -
+125_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ac result_expr: - expected_results -
+126_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ac result_expr: - expected_results -
+127_n: OK regex: ab\Z parsed_regex: ab\Z str: ca
+b
+ result_expr: - expected_results -
+128_n: OK regex: ab\z parsed_regex: ab\z str: ca
+b
+ result_expr: - expected_results -
+129_n: OK regex: ab$ parsed_regex: ab$ str: ca
+b
+ result_expr: - expected_results -
+130_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ca
+ result_expr: - expected_results -
+131_n: OK regex: ab\z parsed_regex: ab\z str: b
+ca
+ result_expr: - expected_results -
+132_n: OK regex: ab$ parsed_regex: ab$ str: b
+ca
+ result_expr: - expected_results -
+133_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ca result_expr: - expected_results -
+134_n: OK regex: ab\z parsed_regex: ab\z str: b
+ca result_expr: - expected_results -
+135_n: OK regex: ab$ parsed_regex: ab$ str: b
+ca result_expr: - expected_results -
+136_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ca
+b
+ result_expr: - expected_results -
+137_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ca
+b
+ result_expr: - expected_results -
+138_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ca
+b
+ result_expr: - expected_results -
+139_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ca
+ result_expr: - expected_results -
+140_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ca
+ result_expr: - expected_results -
+141_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ca
+ result_expr: - expected_results -
+142_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ca result_expr: - expected_results -
+143_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ca result_expr: - expected_results -
+144_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ca result_expr: - expected_results -
+145_n: OK regex: abb\Z parsed_regex: abb\Z str: abb
+b
+ result_expr: - expected_results -
+146_n: OK regex: abb\z parsed_regex: abb\z str: abb
+b
+ result_expr: - expected_results -
+147_n: OK regex: abb$ parsed_regex: abb$ str: abb
+b
+ result_expr: - expected_results -
+148_y: OK regex: abb\Z parsed_regex: abb\Z str: b
+abb
+ result_expr: $-[0] expected_results 2
+149_n: OK regex: abb\z parsed_regex: abb\z str: b
+abb
+ result_expr: - expected_results -
+150_y: OK regex: abb$ parsed_regex: abb$ str: b
+abb
+ result_expr: $-[0] expected_results 2
+151_y: OK regex: abb\Z parsed_regex: abb\Z str: b
+abb result_expr: $-[0] expected_results 2
+152_y: OK regex: abb\z parsed_regex: abb\z str: b
+abb result_expr: $-[0] expected_results 2
+153_y: OK regex: abb$ parsed_regex: abb$ str: b
+abb result_expr: $-[0] expected_results 2
+154_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: abb
+b
+ result_expr: - expected_results -
+155_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: abb
+b
+ result_expr: - expected_results -
+156_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: abb
+b
+ result_expr: $-[0] expected_results 0
+157_y: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+abb
+ result_expr: $-[0] expected_results 2
+158_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+abb
+ result_expr: - expected_results -
+159_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+abb
+ result_expr: $-[0] expected_results 2
+160_y: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+abb result_expr: $-[0] expected_results 2
+161_y: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+abb result_expr: $-[0] expected_results 2
+162_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+abb result_expr: $-[0] expected_results 2
+163_n: OK regex: abb\Z parsed_regex: abb\Z str: ac
+b
+ result_expr: - expected_results -
+164_n: OK regex: abb\z parsed_regex: abb\z str: ac
+b
+ result_expr: - expected_results -
+165_n: OK regex: abb$ parsed_regex: abb$ str: ac
+b
+ result_expr: - expected_results -
+166_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ac
+ result_expr: - expected_results -
+167_n: OK regex: abb\z parsed_regex: abb\z str: b
+ac
+ result_expr: - expected_results -
+168_n: OK regex: abb$ parsed_regex: abb$ str: b
+ac
+ result_expr: - expected_results -
+169_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ac result_expr: - expected_results -
+170_n: OK regex: abb\z parsed_regex: abb\z str: b
+ac result_expr: - expected_results -
+171_n: OK regex: abb$ parsed_regex: abb$ str: b
+ac result_expr: - expected_results -
+172_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: ac
+b
+ result_expr: - expected_results -
+173_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: ac
+b
+ result_expr: - expected_results -
+174_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: ac
+b
+ result_expr: - expected_results -
+175_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ac
+ result_expr: - expected_results -
+176_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ac
+ result_expr: - expected_results -
+177_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ac
+ result_expr: - expected_results -
+178_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ac result_expr: - expected_results -
+179_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ac result_expr: - expected_results -
+180_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ac result_expr: - expected_results -
+181_n: OK regex: abb\Z parsed_regex: abb\Z str: ca
+b
+ result_expr: - expected_results -
+182_n: OK regex: abb\z parsed_regex: abb\z str: ca
+b
+ result_expr: - expected_results -
+183_n: OK regex: abb$ parsed_regex: abb$ str: ca
+b
+ result_expr: - expected_results -
+184_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ca
+ result_expr: - expected_results -
+185_n: OK regex: abb\z parsed_regex: abb\z str: b
+ca
+ result_expr: - expected_results -
+186_n: OK regex: abb$ parsed_regex: abb$ str: b
+ca
+ result_expr: - expected_results -
+187_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ca result_expr: - expected_results -
+188_n: OK regex: abb\z parsed_regex: abb\z str: b
+ca result_expr: - expected_results -
+189_n: OK regex: abb$ parsed_regex: abb$ str: b
+ca result_expr: - expected_results -
+190_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: ca
+b
+ result_expr: - expected_results -
+191_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: ca
+b
+ result_expr: - expected_results -
+192_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: ca
+b
+ result_expr: - expected_results -
+193_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ca
+ result_expr: - expected_results -
+194_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ca
+ result_expr: - expected_results -
+195_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ca
+ result_expr: - expected_results -
+196_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ca result_expr: - expected_results -
+197_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ca result_expr: - expected_results -
+198_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ca result_expr: - expected_results -
+199_y: OK regex: '\Aa$'m parsed_regex: '\Aa$'m str: a
+
+ result_expr: $& expected_results a
+
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_14_multiline_modifier.cpp.output b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_14_multiline_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_15_group_modifiers.cpp.execution b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_15_group_modifiers.cpp.execution
new file mode 100644
index 000000000..de92abc48
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_15_group_modifiers.cpp.execution
@@ -0,0 +1,87 @@
+Running tests_15_group_modifiers:
+01_y: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: ab result_expr: $& expected_results ab
+02_y: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: ab result_expr: $&:$1 expected_results ab:a
+03_y: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: Ab result_expr: $& expected_results Ab
+04_y: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: Ab result_expr: $&:$1 expected_results Ab:A
+05_n: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: aB result_expr: - expected_results -
+06_n: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: aB result_expr: - expected_results -
+07_y: OK regex: (?i:a)b parsed_regex: (?i:a)b str: ab result_expr: $& expected_results ab
+08_y: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: ab result_expr: $&:$1 expected_results ab:a
+09_y: OK regex: (?i:a)b parsed_regex: (?i:a)b str: Ab result_expr: $& expected_results Ab
+10_y: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: Ab result_expr: $&:$1 expected_results Ab:A
+11_n: OK regex: (?i:a)b parsed_regex: (?i:a)b str: aB result_expr: - expected_results -
+12_n: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: aB result_expr: - expected_results -
+13_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: ab result_expr: $& expected_results ab
+14_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: ab result_expr: $&:$1 expected_results ab:a
+15_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: aB result_expr: $& expected_results aB
+16_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: aB result_expr: $&:$1 expected_results aB:a
+17_n: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: Ab result_expr: - expected_results -
+18_n: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: Ab result_expr: - expected_results -
+19_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: aB result_expr: $& expected_results aB
+20_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: aB result_expr: $1 expected_results a
+21_n: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: AB result_expr: - expected_results -
+22_n: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: AB result_expr: - expected_results -
+23_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: ab result_expr: $& expected_results ab
+24_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: ab result_expr: $&:$1 expected_results ab:a
+25_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: aB result_expr: $& expected_results aB
+26_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: aB result_expr: $&:$1 expected_results aB:a
+27_n: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: Ab result_expr: - expected_results -
+28_n: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: Ab result_expr: - expected_results -
+29_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: aB result_expr: $& expected_results aB
+30_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: aB result_expr: $1 expected_results a
+31_n: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: AB result_expr: - expected_results -
+32_n: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: AB result_expr: - expected_results -
+33_n: OK regex: '((?-i:a.))b'i parsed_regex: '((?-i:a.))b'i str: a
+B result_expr: - expected_results -
+34_n: OK regex: '((?-i:a\N))b'i parsed_regex: '((?-i:a\N))b'i str: a
+B result_expr: - expected_results -
+35_y: OK regex: '((?s-i:a.))b'i parsed_regex: '((?s-i:a.))b'i str: a
+B result_expr: $1 expected_results a
+
+36_n: OK regex: '((?s-i:a\N))b'i parsed_regex: '((?s-i:a\N))b'i str: a
+B result_expr: - expected_results -
+37_n: OK regex: '((?s-i:a.))b'i parsed_regex: '((?s-i:a.))b'i str: B
+B result_expr: - expected_results -
+38_n: OK regex: '((?s-i:a\N))b'i parsed_regex: '((?s-i:a\N))b'i str: B
+B result_expr: - expected_results -
+39_y: OK regex: (?i:.[b].) parsed_regex: (?i:.[b].) str: abd result_expr: $& expected_results abd
+40_y: OK regex: (?i:\N[b]\N) parsed_regex: (?i:\N[b]\N) str: abd result_expr: $& expected_results abd
+41_n: OK regex: ^(?:a?b?)*$ parsed_regex: ^(?:a?b?)*$ str: a-- result_expr: - expected_results -
+42_y: OK regex: ((?s)^a(.))((?m)^b$) parsed_regex: ((?s)^a(.))((?m)^b$) str: a
+b
+c
+ result_expr: $1;$2;$3 expected_results a
+;
+;b
+43_y: OK regex: ((?m)^b$) parsed_regex: ((?m)^b$) str: a
+b
+c
+ result_expr: $1 expected_results b
+44_y: OK regex: (?m)^b parsed_regex: (?m)^b str: a
+b
+ result_expr: $& expected_results b
+45_y: OK regex: (?m)^(b) parsed_regex: (?m)^(b) str: a
+b
+ result_expr: $1 expected_results b
+46_y: OK regex: ((?m)^b) parsed_regex: ((?m)^b) str: a
+b
+ result_expr: $1 expected_results b
+47_y: OK regex: \n((?m)^b) parsed_regex: \n((?m)^b) str: a
+b
+ result_expr: $1 expected_results b
+48_n: OK regex: ^b parsed_regex: ^b str: a
+b
+c
+ result_expr: - expected_results -
+49_n: OK regex: ()^b parsed_regex: ()^b str: a
+b
+c
+ result_expr: - expected_results -
+50_y: OK regex: ((?m)^b) parsed_regex: ((?m)^b) str: a
+b
+c
+ result_expr: $1 expected_results b
+51_y: OK Warning: Parsed regex does not match. regex: '(foo)'n parsed_regex: '(?:foo)'n str: foobar result_expr: $&-$1 expected_results foo-
+52_y: OK Warning: Parsed regex does not match. regex: '(?-n)(foo)(?n)(bar)'n parsed_regex: '(?-n)(foo)(?n)(?:bar)'n str: foobar result_expr: $&-$1-$2 expected_results foobar-foo-
+53_y: OK Warning: Parsed regex does not match. regex: '(?-n:(foo)(?n:(bar)))'n parsed_regex: '(?-n:(foo)(?n:(?:bar)))'n str: foobar result_expr: $&-$1-$2 expected_results foobar-foo-
+
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_15_group_modifiers.cpp.output b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_15_group_modifiers.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_16_perl_syntax_modifier.cpp.execution b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_16_perl_syntax_modifier.cpp.execution
new file mode 100644
index 000000000..761720007
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_16_perl_syntax_modifier.cpp.execution
@@ -0,0 +1,35 @@
+Running tests_16_perl_syntax_modifier:
+01_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $& expected_results a
+02_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $-[0] expected_results 0
+03_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $+[0] expected_results 1
+04_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $& expected_results abbb
+05_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $-[0] expected_results 0
+06_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $+[0] expected_results 4
+07_y: OK Warning: Parsed regex does not match. regex: /a\N c/x parsed_regex: /a\Nc/x str: abc result_expr: $& expected_results abc
+08_y: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzc result_expr: $& expected_results axyzc
+09_n: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzd result_expr: - expected_results -
+10_yS: OK regex: /[a b]/x parsed_regex: /[a b]/x str:   result_expr: $& expected_results  
+11_n: OK regex: /[a b]/xx parsed_regex: /[a b]/xx str:   result_expr: - expected_results -
+12_y: OK regex: /[a\ b]/xx parsed_regex: /[a\ b]/xx str:   result_expr: $& expected_results  
+13_n: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: a result_expr: - expected_results -
+14_n: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: b result_expr: - expected_results -
+15_y: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: A result_expr: $& expected_results A
+16_yS: OK regex: /(?x:[a b])/xx parsed_regex: /(?x:[a b])/xx str:   result_expr: $& expected_results  
+17_n: OK regex: /(?xx:[a b])/x parsed_regex: /(?xx:[a b])/x str:   result_expr: - expected_results -
+18_yS: OK regex: /(?x)[a b]/xx parsed_regex: /(?x)[a b]/xx str:   result_expr: $& expected_results  
+19_n: OK regex: /(?xx)[a b]/x parsed_regex: /(?xx)[a b]/x str:   result_expr: - expected_results -
+20_yS: OK regex: /(?-x:[a b])/xx parsed_regex: /(?-x:[a b])/xx str:   result_expr: $& expected_results  
+21_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $& expected_results a
+22_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $-[0] expected_results 0
+23_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $+[0] expected_results 1
+24_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $& expected_results abbb
+25_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $-[0] expected_results 0
+26_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $+[0] expected_results 4
+27_y: OK Warning: Parsed regex does not match. regex: /a\N c/x parsed_regex: /a\Nc/x str: abc result_expr: $& expected_results abc
+28_y: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzc result_expr: $& expected_results axyzc
+29_n: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzd result_expr: - expected_results -
+30_y: OK regex: /[#]/ parsed_regex: /[#]/ str: a#b result_expr: $& expected_results #
+31_y: OK regex: /[#]b/ parsed_regex: /[#]b/ str: a#b result_expr: $& expected_results #b
+32_y: OK regex: /[#]/x parsed_regex: /[#]/x str: a#b result_expr: $& expected_results #
+33_y: OK regex: /[#]b/x parsed_regex: /[#]b/x str: a#b result_expr: $& expected_results #b
+
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_16_perl_syntax_modifier.cpp.output b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_16_perl_syntax_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_17_comments.cpp.execution b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_17_comments.cpp.execution
new file mode 100644
index 000000000..17c9a5d55
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_17_comments.cpp.execution
@@ -0,0 +1,5 @@
+Running tests_17_comments:
+01_y: OK regex: ^a(?#xxx){3}c parsed_regex: ^a(?#xxx){3}c str: aaac result_expr: $& expected_results aaac
+02_y: OK Warning: Parsed regex does not match. regex: '^a (?#xxx) (?#yyy) {3}c'x parsed_regex: '^a(?#xxx)(?#yyy){3}c'x str: aaac result_expr: $& expected_results aaac
+03_y: OK Warning: Parsed regex does not match. regex: 'foo # Match foo'x parsed_regex: 'foo'x str: foobar result_expr: $& expected_results foo
+
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_17_comments.cpp.output b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_17_comments.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_18_branch_reset.cpp.execution b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_18_branch_reset.cpp.execution
new file mode 100644
index 000000000..1d088ce31
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_18_branch_reset.cpp.execution
@@ -0,0 +1,17 @@
+Running tests_18_branch_reset:
+01_y: OK regex: (?|(a)) parsed_regex: (?|(a)) str: a result_expr: $1-$+ expected_results a-a
+02_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: d!o!da result_expr: $1-$2-$3 expected_results !o!-o-a
+03_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: aabc result_expr: $1-$2-$3 expected_results a--c
+04_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: ixyjp result_expr: $1-$2-$3 expected_results x-y-p
+05_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: a result_expr: $1 expected_results a
+06_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: b result_expr: $1 expected_results b
+07_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: c result_expr: $1 expected_results c
+08_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: d result_expr: $1 expected_results d
+09_y: OK regex: (.)(?|(.)(.)x|(.)d)(.) parsed_regex: (.)(?|(.)(.)x|(.)d)(.) str: abcde result_expr: $1-$2-$3-$4-$5- expected_results b-c--e--
+10_y: OK regex: (\N)(?|(\N)(\N)x|(\N)d)(\N) parsed_regex: (\N)(?|(\N)(\N)x|(\N)d)(\N) str: abcde result_expr: $1-$2-$3-$4-$5- expected_results b-c--e--
+11_yM: OK regex: (?|(?<foo>x)) parsed_regex: (?|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+12_yM: OK regex: (?|(?<foo>x)|(?<bar>y)) parsed_regex: (?|(?<foo>x)|(?<bar>y)) str: x result_expr: $+{foo} expected_results x
+13_yM: OK regex: (?|(?<bar>y)|(?<foo>x)) parsed_regex: (?|(?<bar>y)|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+14_yM: OK regex: (?<bar>)(?|(?<foo>x)) parsed_regex: (?<bar>)(?|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+15_y: OK regex: (?|(b)|()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(a)) parsed_regex: (?|(b)|()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(a)) str: a result_expr: $& expected_results a
+
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_18_branch_reset.cpp.output b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_18_branch_reset.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_19_lookahead.cpp.execution b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_19_lookahead.cpp.execution
new file mode 100644
index 000000000..7b34914b1
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_19_lookahead.cpp.execution
@@ -0,0 +1,77 @@
+Running tests_19_lookahead:
+01_y: OK regex: a(?!b). parsed_regex: a(?!b). str: abad result_expr: $& expected_results ad
+02_y: OK regex: (?=)a parsed_regex: (?=)a str: a result_expr: $& expected_results a
+03_y: OK regex: a(?=d). parsed_regex: a(?=d). str: abad result_expr: $& expected_results ad
+04_y: OK regex: a(?=c|d). parsed_regex: a(?=c|d). str: abad result_expr: $& expected_results ad
+05_y: OK regex: ^(?:b|a(?=(.)))*\1 parsed_regex: ^(?:b|a(?=(.)))*\1 str: abc result_expr: $& expected_results ab
+06_y: OK regex: (?=(a+?))(\1ab) parsed_regex: (?=(a+?))(\1ab) str: aaab result_expr: $2 expected_results aab
+07_n: OK regex: ^(?=(a+?))\1ab parsed_regex: ^(?=(a+?))\1ab str: aaab result_expr: - expected_results -
+08_y: OK regex: (?=(a+?))(\1ab) parsed_regex: (?=(a+?))(\1ab) str: aaab result_expr: $2 expected_results aab
+09_n: OK regex: ^(?=(a+?))\1ab parsed_regex: ^(?=(a+?))\1ab str: aaab result_expr: - expected_results -
+10_y: OK regex: (.*)(?=c) parsed_regex: (.*)(?=c) str: abcd result_expr: $1 expected_results ab
+11_yB: OK regex: (.*)(?=c)c parsed_regex: (.*)(?=c)c str: abcd result_expr: $1 expected_results ab
+12_y: OK regex: (.*)(?=b|c) parsed_regex: (.*)(?=b|c) str: abcd result_expr: $1 expected_results ab
+13_y: OK regex: (.*)(?=b|c)c parsed_regex: (.*)(?=b|c)c str: abcd result_expr: $1 expected_results ab
+14_y: OK regex: (.*)(?=c|b) parsed_regex: (.*)(?=c|b) str: abcd result_expr: $1 expected_results ab
+15_y: OK regex: (.*)(?=c|b)c parsed_regex: (.*)(?=c|b)c str: abcd result_expr: $1 expected_results ab
+16_y: OK regex: (.*)(?=[bc]) parsed_regex: (.*)(?=[bc]) str: abcd result_expr: $1 expected_results ab
+17_yB: OK regex: (.*)(?=[bc])c parsed_regex: (.*)(?=[bc])c str: abcd result_expr: $1 expected_results ab
+18_y: OK regex: (.*?)(?=c) parsed_regex: (.*?)(?=c) str: abcd result_expr: $1 expected_results ab
+19_yB: OK regex: (.*?)(?=c)c parsed_regex: (.*?)(?=c)c str: abcd result_expr: $1 expected_results ab
+20_y: OK regex: (.*?)(?=b|c) parsed_regex: (.*?)(?=b|c) str: abcd result_expr: $1 expected_results a
+21_y: OK regex: (.*?)(?=b|c)c parsed_regex: (.*?)(?=b|c)c str: abcd result_expr: $1 expected_results ab
+22_y: OK regex: (.*?)(?=c|b) parsed_regex: (.*?)(?=c|b) str: abcd result_expr: $1 expected_results a
+23_y: OK regex: (.*?)(?=c|b)c parsed_regex: (.*?)(?=c|b)c str: abcd result_expr: $1 expected_results ab
+24_y: OK regex: (.*?)(?=[bc]) parsed_regex: (.*?)(?=[bc]) str: abcd result_expr: $1 expected_results a
+25_yB: OK regex: (.*?)(?=[bc])c parsed_regex: (.*?)(?=[bc])c str: abcd result_expr: $1 expected_results ab
+26_y: OK regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) parsed_regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) str: aaaaaaaa result_expr: $1 expected_results aaaaaaa
+27_y: OK regex: a(?!b(?!c))(..) parsed_regex: a(?!b(?!c))(..) str: abababc result_expr: $1 expected_results bc
+28_y: OK regex: a(?!b(?=a))(..) parsed_regex: a(?!b(?=a))(..) str: abababc result_expr: $1 expected_results bc
+37_y: OK regex: X(\w+)(?=\s)|X(\w+) parsed_regex: X(\w+)(?=\s)|X(\w+) str: Xab result_expr: [$1-$2] expected_results [-ab]
+38_y: OK regex: ^a*(?=b)b parsed_regex: ^a*(?=b)b str: ab result_expr: $& expected_results ab
+39_y: OK regex: '(?!\A)x'm parsed_regex: '(?!\A)x'm str: a
+xb
+ result_expr: - expected_results -
+40_n: OK regex: '^(o)(?!.*\1)'i parsed_regex: '^(o)(?!.*\1)'i str: Oo result_expr: - expected_results -
+41_n: OK regex: .*a(?!(b|cd)*e).*f parsed_regex: .*a(?!(b|cd)*e).*f str: ......abef result_expr: - expected_results -
+42_y: OK regex: ^(a*?)(?!(aa|aaaa)*$) parsed_regex: ^(a*?)(?!(aa|aaaa)*$) str: aaaaaaaaaaaaaaaaaaaa result_expr: $1 expected_results a
+43_y: OK regex: (?!)+?|(.{2,4}) parsed_regex: (?!)+?|(.{2,4}) str: abcde result_expr: $1 expected_results abcd
+44_y: OK regex: ^(a*?)(?!(a{6}|a{5})*$) parsed_regex: ^(a*?)(?!(a{6}|a{5})*$) str: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa result_expr: $+[1] expected_results 12
+45_y: OK regex: a(?!b(?!c(?!d(?!e))))...(.) parsed_regex: a(?!b(?!c(?!d(?!e))))...(.) str: abxabcdxabcde result_expr: $1 expected_results e
+46_y: OK regex: X(?!b+(?!(c+)*(?!(c+)*d))).*X parsed_regex: X(?!b+(?!(c+)*(?!(c+)*d))).*X str: aXbbbbbbbcccccccccccccaaaX result_expr: - expected_results -
+47_y: OK regex: ((?s).)c(?!.) parsed_regex: ((?s).)c(?!.) str: a
+b
+c
+ result_expr: $1 expected_results 
+
+48_y: OK regex: ((?s).)c(?!.) parsed_regex: ((?s).)c(?!.) str: a
+b
+c
+ result_expr: $1:$& expected_results 
+:
+c
+49_y: OK regex: ((?s)b.)c(?!.) parsed_regex: ((?s)b.)c(?!.) str: a
+b
+c
+ result_expr: $1 expected_results b
+
+50_y: OK regex: ((?s)b.)c(?!.) parsed_regex: ((?s)b.)c(?!.) str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+51_y: OK regex: ((?s)b.)c(?!\N) parsed_regex: ((?s)b.)c(?!\N) str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+52_y: OK regex: '(b.)c(?!\N)'s parsed_regex: '(b.)c(?!\N)'s str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+53_n: OK regex: a*(?!) parsed_regex: a*(?!) str: aaaab result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-regex_19_lookahead.cpp.output b/regression-tests/test-results/msvc-2022-c++20/pure2-regex_19_lookahead.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_01_char_matcher.cpp.execution b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_01_char_matcher.cpp.execution
new file mode 100644
index 000000000..af124736e
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_01_char_matcher.cpp.execution
@@ -0,0 +1,14 @@
+Running tests_01_char_matcher:
+01_y: OK regex: abc parsed_regex: abc str: abc result_expr: $& expected_results abc
+02_y: OK regex: abc parsed_regex: abc str: abc result_expr: $-[0] expected_results 0
+03_y: OK regex: abc parsed_regex: abc str: abc result_expr: $+[0] expected_results 3
+04_n: OK regex: abc parsed_regex: abc str: xbc result_expr: - expected_results -
+05_n: OK regex: abc parsed_regex: abc str: axc result_expr: - expected_results -
+06_n: OK regex: abc parsed_regex: abc str: abx result_expr: - expected_results -
+07_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $& expected_results abc
+08_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $-[0] expected_results 1
+09_y: OK regex: abc parsed_regex: abc str: xabcy result_expr: $+[0] expected_results 4
+10_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $& expected_results abc
+11_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $-[0] expected_results 2
+12_y: OK regex: abc parsed_regex: abc str: ababc result_expr: $+[0] expected_results 5
+
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_01_char_matcher.cpp.output b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_01_char_matcher.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_02_ranges.cpp.execution b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_02_ranges.cpp.execution
new file mode 100644
index 000000000..dc0b36002
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_02_ranges.cpp.execution
@@ -0,0 +1,42 @@
+Running tests_02_ranges:
+01_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $& expected_results abc
+02_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $-[0] expected_results 0
+03_y: OK regex: ab*c parsed_regex: ab*c str: abc result_expr: $+[0] expected_results 3
+04_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $& expected_results abc
+05_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $-[0] expected_results 0
+06_y: OK regex: ab*bc parsed_regex: ab*bc str: abc result_expr: $+[0] expected_results 3
+07_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $& expected_results abbc
+08_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $-[0] expected_results 0
+09_y: OK regex: ab*bc parsed_regex: ab*bc str: abbc result_expr: $+[0] expected_results 4
+10_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $& expected_results abbbbc
+11_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $-[0] expected_results 0
+12_y: OK regex: ab*bc parsed_regex: ab*bc str: abbbbc result_expr: $+[0] expected_results 6
+13_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $& expected_results abbbbc
+14_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $-[0] expected_results 0
+15_y: OK regex: ab{0,}bc parsed_regex: ab{0,}bc str: abbbbc result_expr: $+[0] expected_results 6
+16_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $& expected_results abbc
+17_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $-[0] expected_results 0
+18_y: OK regex: ab+bc parsed_regex: ab+bc str: abbc result_expr: $+[0] expected_results 4
+19_n: OK regex: ab+bc parsed_regex: ab+bc str: abc result_expr: - expected_results -
+20_n: OK regex: ab+bc parsed_regex: ab+bc str: abq result_expr: - expected_results -
+21_n: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abq result_expr: - expected_results -
+22_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $& expected_results abbbbc
+23_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $-[0] expected_results 0
+24_y: OK regex: ab+bc parsed_regex: ab+bc str: abbbbc result_expr: $+[0] expected_results 6
+25_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $& expected_results abbbbc
+26_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $-[0] expected_results 0
+27_y: OK regex: ab{1,}bc parsed_regex: ab{1,}bc str: abbbbc result_expr: $+[0] expected_results 6
+28_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $& expected_results abbbbc
+29_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $-[0] expected_results 0
+30_y: OK regex: ab{1,3}bc parsed_regex: ab{1,3}bc str: abbbbc result_expr: $+[0] expected_results 6
+31_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $& expected_results abbbbc
+32_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $-[0] expected_results 0
+33_y: OK regex: ab{3,4}bc parsed_regex: ab{3,4}bc str: abbbbc result_expr: $+[0] expected_results 6
+34_n: OK regex: ab{4,5}bc parsed_regex: ab{4,5}bc str: abbbbc result_expr: - expected_results -
+35_y: OK regex: ab?bc parsed_regex: ab?bc str: abbc result_expr: $& expected_results abbc
+36_y: OK regex: ab?bc parsed_regex: ab?bc str: abc result_expr: $& expected_results abc
+37_y: OK regex: ab{0,1}bc parsed_regex: ab{0,1}bc str: abc result_expr: $& expected_results abc
+38_n: OK regex: ab?bc parsed_regex: ab?bc str: abbbbc result_expr: - expected_results -
+39_y: OK regex: ab?c parsed_regex: ab?c str: abc result_expr: $& expected_results abc
+40_y: OK regex: ab{0,1}c parsed_regex: ab{0,1}c str: abc result_expr: $& expected_results abc
+
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_02_ranges.cpp.output b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_02_ranges.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_03_wildcard.cpp.execution b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_03_wildcard.cpp.execution
new file mode 100644
index 000000000..f3f0ea9cc
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_03_wildcard.cpp.execution
@@ -0,0 +1,22 @@
+Running tests_03_wildcard:
+01_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $& expected_results a
+02_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $-[0] expected_results 0
+03_y: OK regex: .{1} parsed_regex: .{1} str: abbbbc result_expr: $+[0] expected_results 1
+04_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $& expected_results abbb
+05_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $-[0] expected_results 0
+06_y: OK regex: .{3,4} parsed_regex: .{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+07_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $& expected_results a
+08_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $-[0] expected_results 0
+09_y: OK regex: \N{1} parsed_regex: \N{1} str: abbbbc result_expr: $+[0] expected_results 1
+10_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $& expected_results abbb
+11_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $-[0] expected_results 0
+12_y: OK regex: \N{3,4} parsed_regex: \N{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+13_y: OK Warning: Parsed regex does not match. regex: \N{ 3 , 4 } parsed_regex: \N{3,4} str: abbbbc result_expr: $+[0] expected_results 4
+14_y: OK regex: a.c parsed_regex: a.c str: abc result_expr: $& expected_results abc
+15_y: OK regex: a.c parsed_regex: a.c str: axc result_expr: $& expected_results axc
+16_y: OK regex: a\Nc parsed_regex: a\Nc str: abc result_expr: $& expected_results abc
+17_y: OK regex: a.*c parsed_regex: a.*c str: axyzc result_expr: $& expected_results axyzc
+18_y: OK regex: a\N*c parsed_regex: a\N*c str: axyzc result_expr: $& expected_results axyzc
+19_n: OK regex: a.*c parsed_regex: a.*c str: axyzd result_expr: - expected_results -
+20_n: OK regex: a\N*c parsed_regex: a\N*c str: axyzd result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_03_wildcard.cpp.output b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_03_wildcard.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_04_start_end.cpp.execution b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_04_start_end.cpp.execution
new file mode 100644
index 000000000..6fef36434
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_04_start_end.cpp.execution
@@ -0,0 +1,11 @@
+Running tests_04_start_end:
+01_y: OK regex: ^abc$ parsed_regex: ^abc$ str: abc result_expr: $& expected_results abc
+02_n: OK regex: ^abc$ parsed_regex: ^abc$ str: abcc result_expr: - expected_results -
+03_y: OK regex: ^abc parsed_regex: ^abc str: abcc result_expr: $& expected_results abc
+04_n: OK regex: ^abc$ parsed_regex: ^abc$ str: aabc result_expr: - expected_results -
+05_y: OK regex: abc$ parsed_regex: abc$ str: aabc result_expr: $& expected_results abc
+06_n: OK regex: abc$ parsed_regex: abc$ str: aabcd result_expr: - expected_results -
+07_y: OK regex: ^ parsed_regex: ^ str: abc result_expr: $& expected_results 
+08_y: OK regex: $ parsed_regex: $ str: abc result_expr: $& expected_results 
+09_n: OK regex: $b parsed_regex: $b str: b result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_04_start_end.cpp.output b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_04_start_end.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_05_classes.cpp.execution b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_05_classes.cpp.execution
new file mode 100644
index 000000000..306bf3395
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_05_classes.cpp.execution
@@ -0,0 +1,21 @@
+Running tests_05_classes:
+01_n: OK regex: a[bc]d parsed_regex: a[bc]d str: abc result_expr: - expected_results -
+02_y: OK regex: a[bc]d parsed_regex: a[bc]d str: abd result_expr: $& expected_results abd
+03_y: OK regex: a[b]d parsed_regex: a[b]d str: abd result_expr: $& expected_results abd
+04_y: OK regex: [a][b][d] parsed_regex: [a][b][d] str: abd result_expr: $& expected_results abd
+05_y: OK regex: .[b]. parsed_regex: .[b]. str: abd result_expr: $& expected_results abd
+06_n: OK regex: .[b]. parsed_regex: .[b]. str: aBd result_expr: - expected_results -
+07_n: OK regex: a[b-d]e parsed_regex: a[b-d]e str: abd result_expr: - expected_results -
+08_y: OK regex: a[b-d]e parsed_regex: a[b-d]e str: ace result_expr: $& expected_results ace
+09_y: OK regex: a[b-d] parsed_regex: a[b-d] str: aac result_expr: $& expected_results ac
+10_y: OK regex: a[-b] parsed_regex: a[-b] str: a- result_expr: $& expected_results a-
+11_y: OK regex: a[b-] parsed_regex: a[b-] str: a- result_expr: $& expected_results a-
+12_y: OK regex: a] parsed_regex: a] str: a] result_expr: $& expected_results a]
+13_y: OK regex: a[]]b parsed_regex: a[]]b str: a]b result_expr: $& expected_results a]b
+14_y: OK regex: a[^bc]d parsed_regex: a[^bc]d str: aed result_expr: $& expected_results aed
+15_n: OK regex: a[^bc]d parsed_regex: a[^bc]d str: abd result_expr: - expected_results -
+16_y: OK regex: a[^-b]c parsed_regex: a[^-b]c str: adc result_expr: $& expected_results adc
+17_n: OK regex: a[^-b]c parsed_regex: a[^-b]c str: a-c result_expr: - expected_results -
+18_n: OK regex: a[^]b]c parsed_regex: a[^]b]c str: a]c result_expr: - expected_results -
+19_y: OK regex: a[^]b]c parsed_regex: a[^]b]c str: adc result_expr: $& expected_results adc
+
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_05_classes.cpp.output b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_05_classes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_06_boundaries.cpp.execution b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_06_boundaries.cpp.execution
new file mode 100644
index 000000000..420a4c587
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_06_boundaries.cpp.execution
@@ -0,0 +1,19 @@
+Running tests_06_boundaries:
+01_y: OK regex: \ba\b parsed_regex: \ba\b str: a- result_expr: - expected_results -
+02_y: OK regex: \ba\b parsed_regex: \ba\b str: -a result_expr: - expected_results -
+03_y: OK regex: \ba\b parsed_regex: \ba\b str: -a- result_expr: - expected_results -
+04_n: OK regex: \by\b parsed_regex: \by\b str: xy result_expr: - expected_results -
+05_n: OK regex: \by\b parsed_regex: \by\b str: yz result_expr: - expected_results -
+06_n: OK regex: \by\b parsed_regex: \by\b str: xyz result_expr: - expected_results -
+07_n: OK regex: \Ba\B parsed_regex: \Ba\B str: a- result_expr: - expected_results -
+08_n: OK regex: \Ba\B parsed_regex: \Ba\B str: -a result_expr: - expected_results -
+09_n: OK regex: \Ba\B parsed_regex: \Ba\B str: -a- result_expr: - expected_results -
+10_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: - expected_results -
+11_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: $-[0] expected_results 1
+12_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: $+[0] expected_results 2
+13_y: OK regex: \By\b parsed_regex: \By\b str: xy result_expr: - expected_results -
+14_y: OK regex: \by\B parsed_regex: \by\B str: yz result_expr: - expected_results -
+15_y: OK regex: \By\B parsed_regex: \By\B str: xyz result_expr: - expected_results -
+16_n: OK regex: \b parsed_regex: \b str:  result_expr: - expected_results -
+17_y: OK regex: \B parsed_regex: \B str:  result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_06_boundaries.cpp.output b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_06_boundaries.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_07_short_classes.cpp.execution b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_07_short_classes.cpp.execution
new file mode 100644
index 000000000..519c05f92
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_07_short_classes.cpp.execution
@@ -0,0 +1,26 @@
+Running tests_07_short_classes:
+01_y: OK regex: \w parsed_regex: \w str: a result_expr: - expected_results -
+02_n: OK regex: \w parsed_regex: \w str: - result_expr: - expected_results -
+03_n: OK regex: \W parsed_regex: \W str: a result_expr: - expected_results -
+04_y: OK regex: \W parsed_regex: \W str: - result_expr: - expected_results -
+05_y: OK regex: a\sb parsed_regex: a\sb str: a b result_expr: - expected_results -
+06_n: OK regex: a\sb parsed_regex: a\sb str: a-b result_expr: - expected_results -
+07_n: OK regex: a\Sb parsed_regex: a\Sb str: a b result_expr: - expected_results -
+08_y: OK regex: a\Sb parsed_regex: a\Sb str: a-b result_expr: - expected_results -
+09_y: OK regex: \d parsed_regex: \d str: 1 result_expr: - expected_results -
+10_n: OK regex: \d parsed_regex: \d str: - result_expr: - expected_results -
+11_n: OK regex: \D parsed_regex: \D str: 1 result_expr: - expected_results -
+12_y: OK regex: \D parsed_regex: \D str: - result_expr: - expected_results -
+13_y: OK regex: [\w] parsed_regex: [\w] str: a result_expr: - expected_results -
+14_n: OK regex: [\w] parsed_regex: [\w] str: - result_expr: - expected_results -
+15_n: OK regex: [\W] parsed_regex: [\W] str: a result_expr: - expected_results -
+16_y: OK regex: [\W] parsed_regex: [\W] str: - result_expr: - expected_results -
+17_y: OK regex: a[\s]b parsed_regex: a[\s]b str: a b result_expr: - expected_results -
+18_n: OK regex: a[\s]b parsed_regex: a[\s]b str: a-b result_expr: - expected_results -
+19_n: OK regex: a[\S]b parsed_regex: a[\S]b str: a b result_expr: - expected_results -
+20_y: OK regex: a[\S]b parsed_regex: a[\S]b str: a-b result_expr: - expected_results -
+21_y: OK regex: [\d] parsed_regex: [\d] str: 1 result_expr: - expected_results -
+22_n: OK regex: [\d] parsed_regex: [\d] str: - result_expr: - expected_results -
+23_n: OK regex: [\D] parsed_regex: [\D] str: 1 result_expr: - expected_results -
+24_y: OK regex: [\D] parsed_regex: [\D] str: - result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_07_short_classes.cpp.output b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_07_short_classes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_08_alternatives.cpp.execution b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_08_alternatives.cpp.execution
new file mode 100644
index 000000000..c12fd2afe
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_08_alternatives.cpp.execution
@@ -0,0 +1,4 @@
+Running tests_08_alternatives:
+01_y: OK regex: ab|cd parsed_regex: ab|cd str: abc result_expr: $& expected_results ab
+02_y: OK regex: ab|cd parsed_regex: ab|cd str: abcd result_expr: $& expected_results ab
+
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_08_alternatives.cpp.output b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_08_alternatives.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_09_groups.cpp.execution b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_09_groups.cpp.execution
new file mode 100644
index 000000000..05df860f9
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_09_groups.cpp.execution
@@ -0,0 +1,13 @@
+Running tests_09_groups:
+01_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $&-$1 expected_results ef-
+02_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $-[0] expected_results 1
+03_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $+[0] expected_results 3
+04_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $-[1] expected_results 1
+05_y: OK regex: ()ef parsed_regex: ()ef str: def result_expr: $+[1] expected_results 1
+06_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $&-$1-$2 expected_results a-a-a
+07_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $-[0]-$-[1]-$-[2] expected_results 0-0-0
+08_y: OK regex: ((a)) parsed_regex: ((a)) str: abc result_expr: $+[0]-$+[1]-$+[2] expected_results 1-1-1
+09_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $&-$1-$2 expected_results abc-a-c
+10_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $-[0]-$-[1]-$-[2] expected_results 0-0-2
+11_y: OK regex: (a)b(c) parsed_regex: (a)b(c) str: abc result_expr: $+[0]-$+[1]-$+[2] expected_results 3-1-3
+
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_09_groups.cpp.output b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_09_groups.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_10_escapes.cpp.execution b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_10_escapes.cpp.execution
new file mode 100644
index 000000000..fe6e6efc9
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_10_escapes.cpp.execution
@@ -0,0 +1,39 @@
+Running tests_10_escapes:
+01_y: OK regex: a\(b parsed_regex: a\(b str: a(b result_expr: $&-$1 expected_results a(b-
+02_y: OK regex: a\(*b parsed_regex: a\(*b str: ab result_expr: $& expected_results ab
+03_y: OK regex: a\(*b parsed_regex: a\(*b str: a((b result_expr: $& expected_results a((b
+04_y: OK regex: a\\b parsed_regex: a\\b str: a\b result_expr: $& expected_results a\b
+05_y: OK regex: foo(\h+)bar parsed_regex: foo(\h+)bar str: foo	bar result_expr: $1 expected_results 	
+06_y: OK regex: (\H+)(\h) parsed_regex: (\H+)(\h) str: foo	bar result_expr: $1-$2 expected_results foo-	
+07_y: OK regex: (\h+)(\H) parsed_regex: (\h+)(\H) str: foo	bar result_expr: $1-$2 expected_results 	-b
+08_y: OK regex: foo(\h)bar parsed_regex: foo(\h)bar str: foo	bar result_expr: $1 expected_results 	
+09_y: OK regex: (\H)(\h) parsed_regex: (\H)(\h) str: foo	bar result_expr: $1-$2 expected_results o-	
+10_y: OK regex: (\h)(\H) parsed_regex: (\h)(\H) str: foo	bar result_expr: $1-$2 expected_results 	-b
+11_y: OK regex: foo(\v+)bar parsed_regex: foo(\v+)bar str: foo
+
+
+bar result_expr: $1 expected_results 
+
+
+
+12_y: OK regex: (\V+)(\v) parsed_regex: (\V+)(\v) str: foo
+
+
+bar result_expr: $1-$2 expected_results foo-
+13_y: OK regex: (\v+)(\V) parsed_regex: (\v+)(\V) str: foo
+
+
+bar result_expr: $1-$2 expected_results 
+
+
+-b
+14_y: OK regex: foo(\v)bar parsed_regex: foo(\v)bar str: foo
bar result_expr: $1 expected_results 
+15_y: OK regex: (\V)(\v) parsed_regex: (\V)(\v) str: foo
bar result_expr: $1-$2 expected_results o-
+16_y: OK regex: (\v)(\V) parsed_regex: (\v)(\V) str: foo
bar result_expr: $1-$2 expected_results 
-b
+17_y: OK regex: foo\t\n\r\f\a\ebar parsed_regex: foo\t\n\r\f\a\ebar str: foo	
+
bar result_expr: $& expected_results foo	
+
bar
+18_y: OK regex: foo\Kbar parsed_regex: foo\Kbar str: foobar result_expr: $& expected_results bar
+19_y: OK regex: \x41\x42 parsed_regex: \x41\x42 str: AB result_expr: $& expected_results AB
+20_y: OK regex: \101\o{102} parsed_regex: \101\o{102} str: AB result_expr: $& expected_results AB
+
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_10_escapes.cpp.output b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_10_escapes.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_11_group_references.cpp.execution b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_11_group_references.cpp.execution
new file mode 100644
index 000000000..724d0085a
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_11_group_references.cpp.execution
@@ -0,0 +1,26 @@
+Running tests_11_group_references:
+01_y: OK regex: (foo)(\g-2) parsed_regex: (foo)(\g-2) str: foofoo result_expr: $1-$2 expected_results foo-foo
+02_y: OK regex: (foo)(\g-2)(foo)(\g-2) parsed_regex: (foo)(\g-2)(foo)(\g-2) str: foofoofoofoo result_expr: $1-$2-$3-$4 expected_results foo-foo-foo-foo
+03_y: OK regex: (([abc]+) \g-1)(([abc]+) \g{-1}) parsed_regex: (([abc]+) \g-1)(([abc]+) \g{-1}) str: abc abccba cba result_expr: $2-$4 expected_results abc-cba
+04_y: OK regex: (a)(b)(c)\g1\g2\g3 parsed_regex: (a)(b)(c)\g1\g2\g3 str: abcabc result_expr: $1$2$3 expected_results abc
+05_y: OK regex: /(?'n'foo) \g{n}/ parsed_regex: /(?'n'foo) \g{n}/ str: ..foo foo.. result_expr: $1 expected_results foo
+06_y: OK regex: /(?'n'foo) \g{ n }/ parsed_regex: /(?'n'foo) \g{ n }/ str: ..foo foo.. result_expr: $1 expected_results foo
+07_yM: OK regex: /(?'n'foo) \g{n}/ parsed_regex: /(?'n'foo) \g{n}/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+08_y: OK regex: /(?<n>foo) \g{n}/ parsed_regex: /(?<n>foo) \g{n}/ str: ..foo foo.. result_expr: $1 expected_results foo
+09_yM: OK regex: /(?<n>foo) \g{n}/ parsed_regex: /(?<n>foo) \g{n}/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+10_y: OK regex: /(?<as>as) (\w+) \g{as} (\w+)/ parsed_regex: /(?<as>as) (\w+) \g{as} (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+11_y: OK regex: /(?'n'foo) \k<n>/ parsed_regex: /(?'n'foo) \k<n>/ str: ..foo foo.. result_expr: $1 expected_results foo
+12_yM: OK regex: /(?'n'foo) \k<n>/ parsed_regex: /(?'n'foo) \k<n>/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+13_y: OK regex: /(?<n>foo) \k'n'/ parsed_regex: /(?<n>foo) \k'n'/ str: ..foo foo.. result_expr: $1 expected_results foo
+14_yM: OK regex: /(?<n>foo) \k'n'/ parsed_regex: /(?<n>foo) \k'n'/ str: ..foo foo.. result_expr: $+{n} expected_results foo
+15_yM: OK regex: /(?'a1'foo) \k'a1'/ parsed_regex: /(?'a1'foo) \k'a1'/ str: ..foo foo.. result_expr: $+{a1} expected_results foo
+16_yM: OK regex: /(?<a1>foo) \k<a1>/ parsed_regex: /(?<a1>foo) \k<a1>/ str: ..foo foo.. result_expr: $+{a1} expected_results foo
+17_yM: OK regex: /(?'_'foo) \k'_'/ parsed_regex: /(?'_'foo) \k'_'/ str: ..foo foo.. result_expr: $+{_} expected_results foo
+18_yM: OK regex: /(?<_>foo) \k<_>/ parsed_regex: /(?<_>foo) \k<_>/ str: ..foo foo.. result_expr: $+{_} expected_results foo
+19_yM: OK regex: /(?'_0_'foo) \k'_0_'/ parsed_regex: /(?'_0_'foo) \k'_0_'/ str: ..foo foo.. result_expr: $+{_0_} expected_results foo
+20_yM: OK regex: /(?<_0_>foo) \k<_0_>/ parsed_regex: /(?<_0_>foo) \k<_0_>/ str: ..foo foo.. result_expr: $+{_0_} expected_results foo
+21_y: OK regex: /(?<as>as) (\w+) \k<as> (\w+)/ parsed_regex: /(?<as>as) (\w+) \k<as> (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+22_y: OK regex: /(?<as>as) (\w+) \k{as} (\w+)/ parsed_regex: /(?<as>as) (\w+) \k{as} (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+23_y: OK regex: /(?<as>as) (\w+) \k'as' (\w+)/ parsed_regex: /(?<as>as) (\w+) \k'as' (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+24_y: OK regex: /(?<as>as) (\w+) \k{ as } (\w+)/ parsed_regex: /(?<as>as) (\w+) \k{ as } (\w+)/ str: as easy as pie result_expr: $1-$2-$3 expected_results as-easy-pie
+
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_11_group_references.cpp.output b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_11_group_references.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_12_case_insensitive.cpp.execution b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_12_case_insensitive.cpp.execution
new file mode 100644
index 000000000..4939deb24
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_12_case_insensitive.cpp.execution
@@ -0,0 +1,121 @@
+Running tests_12_case_insensitive:
+01_y: OK regex: 'abc'i parsed_regex: 'abc'i str: ABC result_expr: $& expected_results ABC
+02_n: OK regex: 'abc'i parsed_regex: 'abc'i str: XBC result_expr: - expected_results -
+03_n: OK regex: 'abc'i parsed_regex: 'abc'i str: AXC result_expr: - expected_results -
+04_n: OK regex: 'abc'i parsed_regex: 'abc'i str: ABX result_expr: - expected_results -
+05_y: OK regex: 'abc'i parsed_regex: 'abc'i str: XABCY result_expr: $& expected_results ABC
+06_y: OK regex: 'abc'i parsed_regex: 'abc'i str: ABABC result_expr: $& expected_results ABC
+07_y: OK regex: 'ab*c'i parsed_regex: 'ab*c'i str: ABC result_expr: $& expected_results ABC
+08_y: OK regex: 'ab*bc'i parsed_regex: 'ab*bc'i str: ABC result_expr: $& expected_results ABC
+09_y: OK regex: 'ab*bc'i parsed_regex: 'ab*bc'i str: ABBC result_expr: $& expected_results ABBC
+10_y: OK regex: 'ab*?bc'i parsed_regex: 'ab*?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+11_y: OK regex: 'ab{0,}?bc'i parsed_regex: 'ab{0,}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+12_y: OK regex: 'ab+?bc'i parsed_regex: 'ab+?bc'i str: ABBC result_expr: $& expected_results ABBC
+13_n: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABC result_expr: - expected_results -
+14_n: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABQ result_expr: - expected_results -
+15_n: OK regex: 'ab{1,}bc'i parsed_regex: 'ab{1,}bc'i str: ABQ result_expr: - expected_results -
+16_y: OK regex: 'ab+bc'i parsed_regex: 'ab+bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+17_y: OK regex: 'ab{1,}?bc'i parsed_regex: 'ab{1,}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+18_y: OK regex: 'ab{1,3}?bc'i parsed_regex: 'ab{1,3}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+19_y: OK regex: 'ab{3,4}?bc'i parsed_regex: 'ab{3,4}?bc'i str: ABBBBC result_expr: $& expected_results ABBBBC
+20_n: OK regex: 'ab{4,5}?bc'i parsed_regex: 'ab{4,5}?bc'i str: ABBBBC result_expr: - expected_results -
+21_y: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABBC result_expr: $& expected_results ABBC
+22_y: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABC result_expr: $& expected_results ABC
+23_y: OK regex: 'ab{0,1}?bc'i parsed_regex: 'ab{0,1}?bc'i str: ABC result_expr: $& expected_results ABC
+24_n: OK regex: 'ab??bc'i parsed_regex: 'ab??bc'i str: ABBBBC result_expr: - expected_results -
+25_y: OK regex: 'ab??c'i parsed_regex: 'ab??c'i str: ABC result_expr: $& expected_results ABC
+26_y: OK regex: 'ab{0,1}?c'i parsed_regex: 'ab{0,1}?c'i str: ABC result_expr: $& expected_results ABC
+27_y: OK regex: '^abc$'i parsed_regex: '^abc$'i str: ABC result_expr: $& expected_results ABC
+28_n: OK regex: '^abc$'i parsed_regex: '^abc$'i str: ABCC result_expr: - expected_results -
+29_y: OK regex: '^abc'i parsed_regex: '^abc'i str: ABCC result_expr: $& expected_results ABC
+30_n: OK regex: '^abc$'i parsed_regex: '^abc$'i str: AABC result_expr: - expected_results -
+31_y: OK regex: 'abc$'i parsed_regex: 'abc$'i str: AABC result_expr: $& expected_results ABC
+32_y: OK regex: '^'i parsed_regex: '^'i str: ABC result_expr: $& expected_results 
+33_y: OK regex: '$'i parsed_regex: '$'i str: ABC result_expr: $& expected_results 
+34_y: OK regex: 'a.c'i parsed_regex: 'a.c'i str: ABC result_expr: $& expected_results ABC
+35_y: OK regex: 'a.c'i parsed_regex: 'a.c'i str: AXC result_expr: $& expected_results AXC
+36_y: OK regex: 'a\Nc'i parsed_regex: 'a\Nc'i str: ABC result_expr: $& expected_results ABC
+37_y: OK regex: 'a.*?c'i parsed_regex: 'a.*?c'i str: AXYZC result_expr: $& expected_results AXYZC
+38_n: OK regex: 'a.*c'i parsed_regex: 'a.*c'i str: AXYZD result_expr: - expected_results -
+39_n: OK regex: 'a[bc]d'i parsed_regex: 'a[bc]d'i str: ABC result_expr: - expected_results -
+40_y: OK regex: 'a[bc]d'i parsed_regex: 'a[bc]d'i str: ABD result_expr: $& expected_results ABD
+41_n: OK regex: 'a[b-d]e'i parsed_regex: 'a[b-d]e'i str: ABD result_expr: - expected_results -
+42_y: OK regex: 'a[b-d]e'i parsed_regex: 'a[b-d]e'i str: ACE result_expr: $& expected_results ACE
+43_y: OK regex: 'a[b-d]'i parsed_regex: 'a[b-d]'i str: AAC result_expr: $& expected_results AC
+44_y: OK regex: 'a[-b]'i parsed_regex: 'a[-b]'i str: A- result_expr: $& expected_results A-
+45_y: OK regex: 'a[b-]'i parsed_regex: 'a[b-]'i str: A- result_expr: $& expected_results A-
+46_y: OK regex: 'a]'i parsed_regex: 'a]'i str: A] result_expr: $& expected_results A]
+47_y: OK regex: 'a[]]b'i parsed_regex: 'a[]]b'i str: A]B result_expr: $& expected_results A]B
+48_y: OK regex: 'a[^bc]d'i parsed_regex: 'a[^bc]d'i str: AED result_expr: $& expected_results AED
+49_n: OK regex: 'a[^bc]d'i parsed_regex: 'a[^bc]d'i str: ABD result_expr: - expected_results -
+50_y: OK regex: 'a[^-b]c'i parsed_regex: 'a[^-b]c'i str: ADC result_expr: $& expected_results ADC
+51_n: OK regex: 'a[^-b]c'i parsed_regex: 'a[^-b]c'i str: A-C result_expr: - expected_results -
+52_n: OK regex: 'a[^]b]c'i parsed_regex: 'a[^]b]c'i str: A]C result_expr: - expected_results -
+53_y: OK regex: 'a[^]b]c'i parsed_regex: 'a[^]b]c'i str: ADC result_expr: $& expected_results ADC
+54_y: OK regex: 'ab|cd'i parsed_regex: 'ab|cd'i str: ABC result_expr: $& expected_results AB
+55_y: OK regex: 'ab|cd'i parsed_regex: 'ab|cd'i str: ABCD result_expr: $& expected_results AB
+56_y: OK regex: '()ef'i parsed_regex: '()ef'i str: DEF result_expr: $&-$1 expected_results EF-
+57_n: OK regex: '$b'i parsed_regex: '$b'i str: B result_expr: - expected_results -
+58_y: OK regex: 'a\(b'i parsed_regex: 'a\(b'i str: A(B result_expr: $&-$1 expected_results A(B-
+59_y: OK regex: 'a\(*b'i parsed_regex: 'a\(*b'i str: AB result_expr: $& expected_results AB
+60_y: OK regex: 'a\(*b'i parsed_regex: 'a\(*b'i str: A((B result_expr: $& expected_results A((B
+61_y: OK regex: 'a\\b'i parsed_regex: 'a\\b'i str: A\B result_expr: $& expected_results A\B
+62_y: OK regex: '((a))'i parsed_regex: '((a))'i str: ABC result_expr: $&-$1-$2 expected_results A-A-A
+63_y: OK regex: '(a)b(c)'i parsed_regex: '(a)b(c)'i str: ABC result_expr: $&-$1-$2 expected_results ABC-A-C
+64_y: OK regex: 'a+b+c'i parsed_regex: 'a+b+c'i str: AABBABC result_expr: $& expected_results ABC
+65_y: OK regex: 'a{1,}b{1,}c'i parsed_regex: 'a{1,}b{1,}c'i str: AABBABC result_expr: $& expected_results ABC
+66_y: OK regex: 'a.+?c'i parsed_regex: 'a.+?c'i str: ABCABC result_expr: $& expected_results ABC
+67_y: OK regex: 'a.*?c'i parsed_regex: 'a.*?c'i str: ABCABC result_expr: $& expected_results ABC
+68_y: OK regex: 'a.{0,5}?c'i parsed_regex: 'a.{0,5}?c'i str: ABCABC result_expr: $& expected_results ABC
+69_y: OK regex: '(a+|b)*'i parsed_regex: '(a+|b)*'i str: AB result_expr: $&-$1 expected_results AB-B
+70_y: OK regex: '(a+|b){0,}'i parsed_regex: '(a+|b){0,}'i str: AB result_expr: $&-$1 expected_results AB-B
+71_y: OK regex: '(a+|b)+'i parsed_regex: '(a+|b)+'i str: AB result_expr: $&-$1 expected_results AB-B
+72_y: OK regex: '(a+|b){1,}'i parsed_regex: '(a+|b){1,}'i str: AB result_expr: $&-$1 expected_results AB-B
+73_y: OK regex: '(a+|b)?'i parsed_regex: '(a+|b)?'i str: AB result_expr: $&-$1 expected_results A-A
+74_y: OK regex: '(a+|b){0,1}'i parsed_regex: '(a+|b){0,1}'i str: AB result_expr: $&-$1 expected_results A-A
+75_y: OK regex: '(a+|b){0,1}?'i parsed_regex: '(a+|b){0,1}?'i str: AB result_expr: $&-$1 expected_results -
+76_y: OK regex: '[^ab]*'i parsed_regex: '[^ab]*'i str: CDE result_expr: $& expected_results CDE
+77_n: OK regex: 'abc'i parsed_regex: 'abc'i str:  result_expr: - expected_results -
+78_y: OK regex: 'a*'i parsed_regex: 'a*'i str:  result_expr: $& expected_results 
+79_y: OK regex: '([abc])*d'i parsed_regex: '([abc])*d'i str: ABBBCD result_expr: $&-$1 expected_results ABBBCD-C
+80_y: OK regex: '([abc])*bcd'i parsed_regex: '([abc])*bcd'i str: ABCD result_expr: $&-$1 expected_results ABCD-A
+81_y: OK regex: 'a|b|c|d|e'i parsed_regex: 'a|b|c|d|e'i str: E result_expr: $& expected_results E
+82_y: OK regex: '(a|b|c|d|e)f'i parsed_regex: '(a|b|c|d|e)f'i str: EF result_expr: $&-$1 expected_results EF-E
+83_y: OK regex: 'abcd*efg'i parsed_regex: 'abcd*efg'i str: ABCDEFG result_expr: $& expected_results ABCDEFG
+84_y: OK regex: 'ab*'i parsed_regex: 'ab*'i str: XABYABBBZ result_expr: $& expected_results AB
+85_y: OK regex: 'ab*'i parsed_regex: 'ab*'i str: XAYABBBZ result_expr: $& expected_results A
+86_y: OK regex: '(ab|cd)e'i parsed_regex: '(ab|cd)e'i str: ABCDE result_expr: $&-$1 expected_results CDE-CD
+87_y: OK regex: '[abhgefdc]ij'i parsed_regex: '[abhgefdc]ij'i str: HIJ result_expr: $& expected_results HIJ
+88_n: OK regex: '^(ab|cd)e'i parsed_regex: '^(ab|cd)e'i str: ABCDE result_expr: x$1y expected_results XY
+89_y: OK regex: '(abc|)ef'i parsed_regex: '(abc|)ef'i str: ABCDEF result_expr: $&-$1 expected_results EF-
+90_y: OK regex: '(a|b)c*d'i parsed_regex: '(a|b)c*d'i str: ABCD result_expr: $&-$1 expected_results BCD-B
+91_y: OK regex: '(ab|ab*)bc'i parsed_regex: '(ab|ab*)bc'i str: ABC result_expr: $&-$1 expected_results ABC-A
+92_y: OK regex: 'a([bc]*)c*'i parsed_regex: 'a([bc]*)c*'i str: ABC result_expr: $&-$1 expected_results ABC-BC
+93_y: OK regex: 'a([bc]*)(c*d)'i parsed_regex: 'a([bc]*)(c*d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-BC-D
+94_y: OK regex: 'a([bc]+)(c*d)'i parsed_regex: 'a([bc]+)(c*d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-BC-D
+95_y: OK regex: 'a([bc]*)(c+d)'i parsed_regex: 'a([bc]*)(c+d)'i str: ABCD result_expr: $&-$1-$2 expected_results ABCD-B-CD
+96_y: OK regex: 'a[bcd]*dcdcde'i parsed_regex: 'a[bcd]*dcdcde'i str: ADCDCDE result_expr: $& expected_results ADCDCDE
+97_n: OK regex: 'a[bcd]+dcdcde'i parsed_regex: 'a[bcd]+dcdcde'i str: ADCDCDE result_expr: - expected_results -
+98_y: OK regex: '(ab|a)b*c'i parsed_regex: '(ab|a)b*c'i str: ABC result_expr: $&-$1 expected_results ABC-AB
+99_y: OK regex: '((a)(b)c)(d)'i parsed_regex: '((a)(b)c)(d)'i str: ABCD result_expr: $1-$2-$3-$4 expected_results ABC-A-B-D
+100_y: OK regex: '[a-zA-Z_][a-zA-Z0-9_]*'i parsed_regex: '[a-zA-Z_][a-zA-Z0-9_]*'i str: ALPHA result_expr: $& expected_results ALPHA
+101_y: OK regex: '^a(bc+|b[eh])g|.h$'i parsed_regex: '^a(bc+|b[eh])g|.h$'i str: ABH result_expr: $&-$1 expected_results BH-
+102_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: EFFGZ result_expr: $&-$1-$2 expected_results EFFGZ-EFFGZ-
+103_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: IJ result_expr: $&-$1-$2 expected_results IJ-IJ-J
+104_n: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: EFFG result_expr: - expected_results -
+105_n: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: BCDD result_expr: - expected_results -
+106_y: OK regex: '(bc+d$|ef*g.|h?i(j|k))'i parsed_regex: '(bc+d$|ef*g.|h?i(j|k))'i str: REFFGZ result_expr: $&-$1-$2 expected_results EFFGZ-EFFGZ-
+107_y: OK regex: '((((((((((a))))))))))'i parsed_regex: '((((((((((a))))))))))'i str: A result_expr: $10 expected_results A
+108_y: OK regex: '((((((((((a))))))))))\10'i parsed_regex: '((((((((((a))))))))))\10'i str: AA result_expr: $& expected_results AA
+109_y: OK regex: '(((((((((a)))))))))'i parsed_regex: '(((((((((a)))))))))'i str: A result_expr: $& expected_results A
+110_n: OK regex: 'multiple words of text'i parsed_regex: 'multiple words of text'i str: UH-UH result_expr: - expected_results -
+111_y: OK regex: 'multiple words'i parsed_regex: 'multiple words'i str: MULTIPLE WORDS, YEAH result_expr: $& expected_results MULTIPLE WORDS
+112_y: OK regex: '(.*)c(.*)'i parsed_regex: '(.*)c(.*)'i str: ABCDE result_expr: $&-$1-$2 expected_results ABCDE-AB-DE
+113_y: OK regex: '\((.*), (.*)\)'i parsed_regex: '\((.*), (.*)\)'i str: (A, B) result_expr: ($2, $1) expected_results (B, A)
+114_n: OK regex: '[k]'i parsed_regex: '[k]'i str: AB result_expr: - expected_results -
+115_y: OK regex: 'abcd'i parsed_regex: 'abcd'i str: ABCD result_expr: $& expected_results ABCD
+116_y: OK regex: 'a(bc)d'i parsed_regex: 'a(bc)d'i str: ABCD result_expr: $1 expected_results BC
+117_y: OK regex: 'a[-]?c'i parsed_regex: 'a[-]?c'i str: AC result_expr: $& expected_results AC
+118_y: OK regex: '(abc)\1'i parsed_regex: '(abc)\1'i str: ABCABC result_expr: $1 expected_results ABC
+119_y: OK regex: '([a-c]*)\1'i parsed_regex: '([a-c]*)\1'i str: ABCABC result_expr: $1 expected_results ABC
+
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_12_case_insensitive.cpp.output b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_12_case_insensitive.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_13_posessive_modifier.cpp.execution b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_13_posessive_modifier.cpp.execution
new file mode 100644
index 000000000..916d1a084
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_13_posessive_modifier.cpp.execution
@@ -0,0 +1,50 @@
+Running tests_13_posessive_modifier:
+01_n: OK regex: a++a parsed_regex: a++a str: aaaaa result_expr: - expected_results -
+02_n: OK regex: a*+a parsed_regex: a*+a str: aaaaa result_expr: - expected_results -
+03_n: OK regex: a{1,5}+a parsed_regex: a{1,5}+a str: aaaaa result_expr: - expected_results -
+04_n: OK regex: a?+a parsed_regex: a?+a str: ab result_expr: - expected_results -
+05_y: OK regex: a++b parsed_regex: a++b str: aaaaab result_expr: $& expected_results aaaaab
+06_y: OK regex: a*+b parsed_regex: a*+b str: aaaaab result_expr: $& expected_results aaaaab
+07_y: OK regex: a{1,5}+b parsed_regex: a{1,5}+b str: aaaaab result_expr: $& expected_results aaaaab
+08_y: OK regex: a?+b parsed_regex: a?+b str: ab result_expr: $& expected_results ab
+09_n: OK regex: fooa++a parsed_regex: fooa++a str: fooaaaaa result_expr: - expected_results -
+10_n: OK regex: fooa*+a parsed_regex: fooa*+a str: fooaaaaa result_expr: - expected_results -
+11_n: OK regex: fooa{1,5}+a parsed_regex: fooa{1,5}+a str: fooaaaaa result_expr: - expected_results -
+12_n: OK regex: fooa?+a parsed_regex: fooa?+a str: fooab result_expr: - expected_results -
+13_y: OK regex: fooa++b parsed_regex: fooa++b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+14_y: OK regex: fooa*+b parsed_regex: fooa*+b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+15_y: OK regex: fooa{1,5}+b parsed_regex: fooa{1,5}+b str: fooaaaaab result_expr: $& expected_results fooaaaaab
+16_y: OK regex: fooa?+b parsed_regex: fooa?+b str: fooab result_expr: $& expected_results fooab
+17_n: OK regex: (aA)++(aA) parsed_regex: (aA)++(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+18_n: OK regex: (aA|bB)++(aA|bB) parsed_regex: (aA|bB)++(aA|bB) str: aAaAbBaAbB result_expr: - expected_results aAaAbBaAbB
+19_n: OK regex: (aA)*+(aA) parsed_regex: (aA)*+(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+20_n: OK regex: (aA|bB)*+(aA|bB) parsed_regex: (aA|bB)*+(aA|bB) str: aAaAbBaAaA result_expr: - expected_results aAaAbBaAaA
+21_n: OK regex: (aA){1,5}+(aA) parsed_regex: (aA){1,5}+(aA) str: aAaAaAaAaA result_expr: - expected_results aAaAaAaAaA
+22_n: OK regex: (aA|bB){1,5}+(aA|bB) parsed_regex: (aA|bB){1,5}+(aA|bB) str: aAaAbBaAaA result_expr: - expected_results aAaAbBaAaA
+23_n: OK regex: (aA)?+(aA) parsed_regex: (aA)?+(aA) str: aAb result_expr: - expected_results aAb
+24_n: OK regex: (aA|bB)?+(aA|bB) parsed_regex: (aA|bB)?+(aA|bB) str: bBb result_expr: - expected_results bBb
+25_y: OK regex: (aA)++b parsed_regex: (aA)++b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+26_y: OK regex: (aA|bB)++b parsed_regex: (aA|bB)++b str: aAbBaAaAbBb result_expr: $& expected_results aAbBaAaAbBb
+27_y: OK regex: (aA)*+b parsed_regex: (aA)*+b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+28_y: OK regex: (aA|bB)*+b parsed_regex: (aA|bB)*+b str: bBbBbBbBbBb result_expr: $& expected_results bBbBbBbBbBb
+29_y: OK regex: (aA){1,5}+b parsed_regex: (aA){1,5}+b str: aAaAaAaAaAb result_expr: $& expected_results aAaAaAaAaAb
+30_y: OK regex: (aA|bB){1,5}+b parsed_regex: (aA|bB){1,5}+b str: bBaAbBaAbBb result_expr: $& expected_results bBaAbBaAbBb
+31_y: OK regex: (aA)?+b parsed_regex: (aA)?+b str: aAb result_expr: $& expected_results aAb
+32_y: OK regex: (aA|bB)?+b parsed_regex: (aA|bB)?+b str: bBb result_expr: $& expected_results bBb
+33_n: OK regex: foo(aA)++(aA) parsed_regex: foo(aA)++(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+34_n: OK regex: foo(aA|bB)++(aA|bB) parsed_regex: foo(aA|bB)++(aA|bB) str: foobBbBbBaAaA result_expr: - expected_results foobBbBbBaAaA
+35_n: OK regex: foo(aA)*+(aA) parsed_regex: foo(aA)*+(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+36_n: OK regex: foo(aA|bB)*+(aA|bB) parsed_regex: foo(aA|bB)*+(aA|bB) str: foobBaAbBaAaA result_expr: - expected_results foobBaAbBaAaA
+37_n: OK regex: foo(aA){1,5}+(aA) parsed_regex: foo(aA){1,5}+(aA) str: fooaAaAaAaAaA result_expr: - expected_results fooaAaAaAaAaA
+38_n: OK regex: foo(aA|bB){1,5}+(aA|bB) parsed_regex: foo(aA|bB){1,5}+(aA|bB) str: fooaAbBbBaAaA result_expr: - expected_results fooaAbBbBaAaA
+39_n: OK regex: foo(aA)?+(aA) parsed_regex: foo(aA)?+(aA) str: fooaAb result_expr: - expected_results fooaAb
+40_n: OK regex: foo(aA|bB)?+(aA|bB) parsed_regex: foo(aA|bB)?+(aA|bB) str: foobBb result_expr: - expected_results foobBb
+41_y: OK regex: foo(aA)++b parsed_regex: foo(aA)++b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+42_y: OK regex: foo(aA|bB)++b parsed_regex: foo(aA|bB)++b str: foobBaAbBaAbBb result_expr: $& expected_results foobBaAbBaAbBb
+43_y: OK regex: foo(aA)*+b parsed_regex: foo(aA)*+b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+44_y: OK regex: foo(aA|bB)*+b parsed_regex: foo(aA|bB)*+b str: foobBbBaAaAaAb result_expr: $& expected_results foobBbBaAaAaAb
+45_y: OK regex: foo(aA){1,5}+b parsed_regex: foo(aA){1,5}+b str: fooaAaAaAaAaAb result_expr: $& expected_results fooaAaAaAaAaAb
+46_y: OK regex: foo(aA|bB){1,5}+b parsed_regex: foo(aA|bB){1,5}+b str: foobBaAaAaAaAb result_expr: $& expected_results foobBaAaAaAaAb
+47_y: OK regex: foo(aA)?+b parsed_regex: foo(aA)?+b str: fooaAb result_expr: $& expected_results fooaAb
+48_y: OK regex: foo(aA|bB)?+b parsed_regex: foo(aA|bB)?+b str: foobBb result_expr: $& expected_results foobBb
+
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_13_posessive_modifier.cpp.output b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_13_posessive_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_14_multiline_modifier.cpp.execution b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_14_multiline_modifier.cpp.execution
new file mode 100644
index 000000000..9a12081ac
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_14_multiline_modifier.cpp.execution
@@ -0,0 +1,533 @@
+Running tests_14_multiline_modifier:
+01_y: OK regex: \Z parsed_regex: \Z str: a
+b
+ result_expr: $-[0] expected_results 3
+02_y: OK regex: \z parsed_regex: \z str: a
+b
+ result_expr: $-[0] expected_results 4
+03_y: OK regex: $ parsed_regex: $ str: a
+b
+ result_expr: $-[0] expected_results 3
+04_y: OK regex: \Z parsed_regex: \Z str: b
+a
+ result_expr: $-[0] expected_results 3
+05_y: OK regex: \z parsed_regex: \z str: b
+a
+ result_expr: $-[0] expected_results 4
+06_y: OK regex: $ parsed_regex: $ str: b
+a
+ result_expr: $-[0] expected_results 3
+07_y: OK regex: \Z parsed_regex: \Z str: b
+a result_expr: $-[0] expected_results 3
+08_y: OK regex: \z parsed_regex: \z str: b
+a result_expr: $-[0] expected_results 3
+09_y: OK regex: $ parsed_regex: $ str: b
+a result_expr: $-[0] expected_results 3
+10_y: OK regex: '\Z'm parsed_regex: '\Z'm str: a
+b
+ result_expr: $-[0] expected_results 3
+11_y: OK regex: '\z'm parsed_regex: '\z'm str: a
+b
+ result_expr: $-[0] expected_results 4
+12_y: OK regex: '$'m parsed_regex: '$'m str: a
+b
+ result_expr: $-[0] expected_results 1
+13_y: OK regex: '\Z'm parsed_regex: '\Z'm str: b
+a
+ result_expr: $-[0] expected_results 3
+14_y: OK regex: '\z'm parsed_regex: '\z'm str: b
+a
+ result_expr: $-[0] expected_results 4
+15_y: OK regex: '$'m parsed_regex: '$'m str: b
+a
+ result_expr: $-[0] expected_results 1
+16_y: OK regex: '\Z'm parsed_regex: '\Z'm str: b
+a result_expr: $-[0] expected_results 3
+17_y: OK regex: '\z'm parsed_regex: '\z'm str: b
+a result_expr: $-[0] expected_results 3
+18_y: OK regex: '$'m parsed_regex: '$'m str: b
+a result_expr: $-[0] expected_results 1
+19_n: OK regex: a\Z parsed_regex: a\Z str: a
+b
+ result_expr: - expected_results -
+20_n: OK regex: a\z parsed_regex: a\z str: a
+b
+ result_expr: - expected_results -
+21_n: OK regex: a$ parsed_regex: a$ str: a
+b
+ result_expr: - expected_results -
+22_y: OK regex: a\Z parsed_regex: a\Z str: b
+a
+ result_expr: $-[0] expected_results 2
+23_n: OK regex: a\z parsed_regex: a\z str: b
+a
+ result_expr: - expected_results -
+24_y: OK regex: a$ parsed_regex: a$ str: b
+a
+ result_expr: $-[0] expected_results 2
+25_y: OK regex: a\Z parsed_regex: a\Z str: b
+a result_expr: $-[0] expected_results 2
+26_y: OK regex: a\z parsed_regex: a\z str: b
+a result_expr: $-[0] expected_results 2
+27_y: OK regex: a$ parsed_regex: a$ str: b
+a result_expr: $-[0] expected_results 2
+28_n: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: a
+b
+ result_expr: - expected_results -
+29_n: OK regex: 'a\z'm parsed_regex: 'a\z'm str: a
+b
+ result_expr: - expected_results -
+30_y: OK regex: 'a$'m parsed_regex: 'a$'m str: a
+b
+ result_expr: $-[0] expected_results 0
+31_y: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: b
+a
+ result_expr: $-[0] expected_results 2
+32_n: OK regex: 'a\z'm parsed_regex: 'a\z'm str: b
+a
+ result_expr: - expected_results -
+33_y: OK regex: 'a$'m parsed_regex: 'a$'m str: b
+a
+ result_expr: $-[0] expected_results 2
+34_y: OK regex: 'a\Z'm parsed_regex: 'a\Z'm str: b
+a result_expr: $-[0] expected_results 2
+35_y: OK regex: 'a\z'm parsed_regex: 'a\z'm str: b
+a result_expr: $-[0] expected_results 2
+36_y: OK regex: 'a$'m parsed_regex: 'a$'m str: b
+a result_expr: $-[0] expected_results 2
+37_n: OK regex: aa\Z parsed_regex: aa\Z str: aa
+b
+ result_expr: - expected_results -
+38_n: OK regex: aa\z parsed_regex: aa\z str: aa
+b
+ result_expr: - expected_results -
+39_n: OK regex: aa$ parsed_regex: aa$ str: aa
+b
+ result_expr: - expected_results -
+40_y: OK regex: aa\Z parsed_regex: aa\Z str: b
+aa
+ result_expr: $-[0] expected_results 2
+41_n: OK regex: aa\z parsed_regex: aa\z str: b
+aa
+ result_expr: - expected_results -
+42_y: OK regex: aa$ parsed_regex: aa$ str: b
+aa
+ result_expr: $-[0] expected_results 2
+43_y: OK regex: aa\Z parsed_regex: aa\Z str: b
+aa result_expr: $-[0] expected_results 2
+44_y: OK regex: aa\z parsed_regex: aa\z str: b
+aa result_expr: $-[0] expected_results 2
+45_y: OK regex: aa$ parsed_regex: aa$ str: b
+aa result_expr: $-[0] expected_results 2
+46_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: aa
+b
+ result_expr: - expected_results -
+47_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: aa
+b
+ result_expr: - expected_results -
+48_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: aa
+b
+ result_expr: $-[0] expected_results 0
+49_y: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+aa
+ result_expr: $-[0] expected_results 2
+50_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+aa
+ result_expr: - expected_results -
+51_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+aa
+ result_expr: $-[0] expected_results 2
+52_y: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+aa result_expr: $-[0] expected_results 2
+53_y: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+aa result_expr: $-[0] expected_results 2
+54_y: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+aa result_expr: $-[0] expected_results 2
+55_n: OK regex: aa\Z parsed_regex: aa\Z str: ac
+b
+ result_expr: - expected_results -
+56_n: OK regex: aa\z parsed_regex: aa\z str: ac
+b
+ result_expr: - expected_results -
+57_n: OK regex: aa$ parsed_regex: aa$ str: ac
+b
+ result_expr: - expected_results -
+58_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ac
+ result_expr: - expected_results -
+59_n: OK regex: aa\z parsed_regex: aa\z str: b
+ac
+ result_expr: - expected_results -
+60_n: OK regex: aa$ parsed_regex: aa$ str: b
+ac
+ result_expr: - expected_results -
+61_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ac result_expr: - expected_results -
+62_n: OK regex: aa\z parsed_regex: aa\z str: b
+ac result_expr: - expected_results -
+63_n: OK regex: aa$ parsed_regex: aa$ str: b
+ac result_expr: - expected_results -
+64_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: ac
+b
+ result_expr: - expected_results -
+65_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: ac
+b
+ result_expr: - expected_results -
+66_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: ac
+b
+ result_expr: - expected_results -
+67_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ac
+ result_expr: - expected_results -
+68_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ac
+ result_expr: - expected_results -
+69_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ac
+ result_expr: - expected_results -
+70_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ac result_expr: - expected_results -
+71_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ac result_expr: - expected_results -
+72_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ac result_expr: - expected_results -
+73_n: OK regex: aa\Z parsed_regex: aa\Z str: ca
+b
+ result_expr: - expected_results -
+74_n: OK regex: aa\z parsed_regex: aa\z str: ca
+b
+ result_expr: - expected_results -
+75_n: OK regex: aa$ parsed_regex: aa$ str: ca
+b
+ result_expr: - expected_results -
+76_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ca
+ result_expr: - expected_results -
+77_n: OK regex: aa\z parsed_regex: aa\z str: b
+ca
+ result_expr: - expected_results -
+78_n: OK regex: aa$ parsed_regex: aa$ str: b
+ca
+ result_expr: - expected_results -
+79_n: OK regex: aa\Z parsed_regex: aa\Z str: b
+ca result_expr: - expected_results -
+80_n: OK regex: aa\z parsed_regex: aa\z str: b
+ca result_expr: - expected_results -
+81_n: OK regex: aa$ parsed_regex: aa$ str: b
+ca result_expr: - expected_results -
+82_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: ca
+b
+ result_expr: - expected_results -
+83_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: ca
+b
+ result_expr: - expected_results -
+84_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: ca
+b
+ result_expr: - expected_results -
+85_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ca
+ result_expr: - expected_results -
+86_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ca
+ result_expr: - expected_results -
+87_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ca
+ result_expr: - expected_results -
+88_n: OK regex: 'aa\Z'm parsed_regex: 'aa\Z'm str: b
+ca result_expr: - expected_results -
+89_n: OK regex: 'aa\z'm parsed_regex: 'aa\z'm str: b
+ca result_expr: - expected_results -
+90_n: OK regex: 'aa$'m parsed_regex: 'aa$'m str: b
+ca result_expr: - expected_results -
+91_n: OK regex: ab\Z parsed_regex: ab\Z str: ab
+b
+ result_expr: - expected_results -
+92_n: OK regex: ab\z parsed_regex: ab\z str: ab
+b
+ result_expr: - expected_results -
+93_n: OK regex: ab$ parsed_regex: ab$ str: ab
+b
+ result_expr: - expected_results -
+94_y: OK regex: ab\Z parsed_regex: ab\Z str: b
+ab
+ result_expr: $-[0] expected_results 2
+95_n: OK regex: ab\z parsed_regex: ab\z str: b
+ab
+ result_expr: - expected_results -
+96_y: OK regex: ab$ parsed_regex: ab$ str: b
+ab
+ result_expr: $-[0] expected_results 2
+97_y: OK regex: ab\Z parsed_regex: ab\Z str: b
+ab result_expr: $-[0] expected_results 2
+98_y: OK regex: ab\z parsed_regex: ab\z str: b
+ab result_expr: $-[0] expected_results 2
+99_y: OK regex: ab$ parsed_regex: ab$ str: b
+ab result_expr: $-[0] expected_results 2
+100_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ab
+b
+ result_expr: - expected_results -
+101_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ab
+b
+ result_expr: - expected_results -
+102_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ab
+b
+ result_expr: $-[0] expected_results 0
+103_y: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ab
+ result_expr: $-[0] expected_results 2
+104_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ab
+ result_expr: - expected_results -
+105_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ab
+ result_expr: $-[0] expected_results 2
+106_y: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ab result_expr: $-[0] expected_results 2
+107_y: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ab result_expr: $-[0] expected_results 2
+108_y: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ab result_expr: $-[0] expected_results 2
+109_n: OK regex: ab\Z parsed_regex: ab\Z str: ac
+b
+ result_expr: - expected_results -
+110_n: OK regex: ab\z parsed_regex: ab\z str: ac
+b
+ result_expr: - expected_results -
+111_n: OK regex: ab$ parsed_regex: ab$ str: ac
+b
+ result_expr: - expected_results -
+112_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ac
+ result_expr: - expected_results -
+113_n: OK regex: ab\z parsed_regex: ab\z str: b
+ac
+ result_expr: - expected_results -
+114_n: OK regex: ab$ parsed_regex: ab$ str: b
+ac
+ result_expr: - expected_results -
+115_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ac result_expr: - expected_results -
+116_n: OK regex: ab\z parsed_regex: ab\z str: b
+ac result_expr: - expected_results -
+117_n: OK regex: ab$ parsed_regex: ab$ str: b
+ac result_expr: - expected_results -
+118_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ac
+b
+ result_expr: - expected_results -
+119_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ac
+b
+ result_expr: - expected_results -
+120_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ac
+b
+ result_expr: - expected_results -
+121_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ac
+ result_expr: - expected_results -
+122_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ac
+ result_expr: - expected_results -
+123_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ac
+ result_expr: - expected_results -
+124_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ac result_expr: - expected_results -
+125_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ac result_expr: - expected_results -
+126_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ac result_expr: - expected_results -
+127_n: OK regex: ab\Z parsed_regex: ab\Z str: ca
+b
+ result_expr: - expected_results -
+128_n: OK regex: ab\z parsed_regex: ab\z str: ca
+b
+ result_expr: - expected_results -
+129_n: OK regex: ab$ parsed_regex: ab$ str: ca
+b
+ result_expr: - expected_results -
+130_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ca
+ result_expr: - expected_results -
+131_n: OK regex: ab\z parsed_regex: ab\z str: b
+ca
+ result_expr: - expected_results -
+132_n: OK regex: ab$ parsed_regex: ab$ str: b
+ca
+ result_expr: - expected_results -
+133_n: OK regex: ab\Z parsed_regex: ab\Z str: b
+ca result_expr: - expected_results -
+134_n: OK regex: ab\z parsed_regex: ab\z str: b
+ca result_expr: - expected_results -
+135_n: OK regex: ab$ parsed_regex: ab$ str: b
+ca result_expr: - expected_results -
+136_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: ca
+b
+ result_expr: - expected_results -
+137_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: ca
+b
+ result_expr: - expected_results -
+138_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: ca
+b
+ result_expr: - expected_results -
+139_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ca
+ result_expr: - expected_results -
+140_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ca
+ result_expr: - expected_results -
+141_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ca
+ result_expr: - expected_results -
+142_n: OK regex: 'ab\Z'm parsed_regex: 'ab\Z'm str: b
+ca result_expr: - expected_results -
+143_n: OK regex: 'ab\z'm parsed_regex: 'ab\z'm str: b
+ca result_expr: - expected_results -
+144_n: OK regex: 'ab$'m parsed_regex: 'ab$'m str: b
+ca result_expr: - expected_results -
+145_n: OK regex: abb\Z parsed_regex: abb\Z str: abb
+b
+ result_expr: - expected_results -
+146_n: OK regex: abb\z parsed_regex: abb\z str: abb
+b
+ result_expr: - expected_results -
+147_n: OK regex: abb$ parsed_regex: abb$ str: abb
+b
+ result_expr: - expected_results -
+148_y: OK regex: abb\Z parsed_regex: abb\Z str: b
+abb
+ result_expr: $-[0] expected_results 2
+149_n: OK regex: abb\z parsed_regex: abb\z str: b
+abb
+ result_expr: - expected_results -
+150_y: OK regex: abb$ parsed_regex: abb$ str: b
+abb
+ result_expr: $-[0] expected_results 2
+151_y: OK regex: abb\Z parsed_regex: abb\Z str: b
+abb result_expr: $-[0] expected_results 2
+152_y: OK regex: abb\z parsed_regex: abb\z str: b
+abb result_expr: $-[0] expected_results 2
+153_y: OK regex: abb$ parsed_regex: abb$ str: b
+abb result_expr: $-[0] expected_results 2
+154_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: abb
+b
+ result_expr: - expected_results -
+155_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: abb
+b
+ result_expr: - expected_results -
+156_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: abb
+b
+ result_expr: $-[0] expected_results 0
+157_y: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+abb
+ result_expr: $-[0] expected_results 2
+158_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+abb
+ result_expr: - expected_results -
+159_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+abb
+ result_expr: $-[0] expected_results 2
+160_y: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+abb result_expr: $-[0] expected_results 2
+161_y: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+abb result_expr: $-[0] expected_results 2
+162_y: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+abb result_expr: $-[0] expected_results 2
+163_n: OK regex: abb\Z parsed_regex: abb\Z str: ac
+b
+ result_expr: - expected_results -
+164_n: OK regex: abb\z parsed_regex: abb\z str: ac
+b
+ result_expr: - expected_results -
+165_n: OK regex: abb$ parsed_regex: abb$ str: ac
+b
+ result_expr: - expected_results -
+166_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ac
+ result_expr: - expected_results -
+167_n: OK regex: abb\z parsed_regex: abb\z str: b
+ac
+ result_expr: - expected_results -
+168_n: OK regex: abb$ parsed_regex: abb$ str: b
+ac
+ result_expr: - expected_results -
+169_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ac result_expr: - expected_results -
+170_n: OK regex: abb\z parsed_regex: abb\z str: b
+ac result_expr: - expected_results -
+171_n: OK regex: abb$ parsed_regex: abb$ str: b
+ac result_expr: - expected_results -
+172_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: ac
+b
+ result_expr: - expected_results -
+173_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: ac
+b
+ result_expr: - expected_results -
+174_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: ac
+b
+ result_expr: - expected_results -
+175_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ac
+ result_expr: - expected_results -
+176_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ac
+ result_expr: - expected_results -
+177_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ac
+ result_expr: - expected_results -
+178_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ac result_expr: - expected_results -
+179_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ac result_expr: - expected_results -
+180_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ac result_expr: - expected_results -
+181_n: OK regex: abb\Z parsed_regex: abb\Z str: ca
+b
+ result_expr: - expected_results -
+182_n: OK regex: abb\z parsed_regex: abb\z str: ca
+b
+ result_expr: - expected_results -
+183_n: OK regex: abb$ parsed_regex: abb$ str: ca
+b
+ result_expr: - expected_results -
+184_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ca
+ result_expr: - expected_results -
+185_n: OK regex: abb\z parsed_regex: abb\z str: b
+ca
+ result_expr: - expected_results -
+186_n: OK regex: abb$ parsed_regex: abb$ str: b
+ca
+ result_expr: - expected_results -
+187_n: OK regex: abb\Z parsed_regex: abb\Z str: b
+ca result_expr: - expected_results -
+188_n: OK regex: abb\z parsed_regex: abb\z str: b
+ca result_expr: - expected_results -
+189_n: OK regex: abb$ parsed_regex: abb$ str: b
+ca result_expr: - expected_results -
+190_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: ca
+b
+ result_expr: - expected_results -
+191_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: ca
+b
+ result_expr: - expected_results -
+192_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: ca
+b
+ result_expr: - expected_results -
+193_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ca
+ result_expr: - expected_results -
+194_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ca
+ result_expr: - expected_results -
+195_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ca
+ result_expr: - expected_results -
+196_n: OK regex: 'abb\Z'm parsed_regex: 'abb\Z'm str: b
+ca result_expr: - expected_results -
+197_n: OK regex: 'abb\z'm parsed_regex: 'abb\z'm str: b
+ca result_expr: - expected_results -
+198_n: OK regex: 'abb$'m parsed_regex: 'abb$'m str: b
+ca result_expr: - expected_results -
+199_y: OK regex: '\Aa$'m parsed_regex: '\Aa$'m str: a
+
+ result_expr: $& expected_results a
+
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_14_multiline_modifier.cpp.output b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_14_multiline_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_15_group_modifiers.cpp.execution b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_15_group_modifiers.cpp.execution
new file mode 100644
index 000000000..de92abc48
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_15_group_modifiers.cpp.execution
@@ -0,0 +1,87 @@
+Running tests_15_group_modifiers:
+01_y: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: ab result_expr: $& expected_results ab
+02_y: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: ab result_expr: $&:$1 expected_results ab:a
+03_y: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: Ab result_expr: $& expected_results Ab
+04_y: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: Ab result_expr: $&:$1 expected_results Ab:A
+05_n: OK regex: (?:(?i)a)b parsed_regex: (?:(?i)a)b str: aB result_expr: - expected_results -
+06_n: OK regex: ((?i)a)b parsed_regex: ((?i)a)b str: aB result_expr: - expected_results -
+07_y: OK regex: (?i:a)b parsed_regex: (?i:a)b str: ab result_expr: $& expected_results ab
+08_y: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: ab result_expr: $&:$1 expected_results ab:a
+09_y: OK regex: (?i:a)b parsed_regex: (?i:a)b str: Ab result_expr: $& expected_results Ab
+10_y: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: Ab result_expr: $&:$1 expected_results Ab:A
+11_n: OK regex: (?i:a)b parsed_regex: (?i:a)b str: aB result_expr: - expected_results -
+12_n: OK regex: ((?i:a))b parsed_regex: ((?i:a))b str: aB result_expr: - expected_results -
+13_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: ab result_expr: $& expected_results ab
+14_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: ab result_expr: $&:$1 expected_results ab:a
+15_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: aB result_expr: $& expected_results aB
+16_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: aB result_expr: $&:$1 expected_results aB:a
+17_n: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: Ab result_expr: - expected_results -
+18_n: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: Ab result_expr: - expected_results -
+19_y: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: aB result_expr: $& expected_results aB
+20_y: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: aB result_expr: $1 expected_results a
+21_n: OK regex: '(?:(?-i)a)b'i parsed_regex: '(?:(?-i)a)b'i str: AB result_expr: - expected_results -
+22_n: OK regex: '((?-i)a)b'i parsed_regex: '((?-i)a)b'i str: AB result_expr: - expected_results -
+23_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: ab result_expr: $& expected_results ab
+24_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: ab result_expr: $&:$1 expected_results ab:a
+25_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: aB result_expr: $& expected_results aB
+26_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: aB result_expr: $&:$1 expected_results aB:a
+27_n: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: Ab result_expr: - expected_results -
+28_n: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: Ab result_expr: - expected_results -
+29_y: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: aB result_expr: $& expected_results aB
+30_y: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: aB result_expr: $1 expected_results a
+31_n: OK regex: '(?-i:a)b'i parsed_regex: '(?-i:a)b'i str: AB result_expr: - expected_results -
+32_n: OK regex: '((?-i:a))b'i parsed_regex: '((?-i:a))b'i str: AB result_expr: - expected_results -
+33_n: OK regex: '((?-i:a.))b'i parsed_regex: '((?-i:a.))b'i str: a
+B result_expr: - expected_results -
+34_n: OK regex: '((?-i:a\N))b'i parsed_regex: '((?-i:a\N))b'i str: a
+B result_expr: - expected_results -
+35_y: OK regex: '((?s-i:a.))b'i parsed_regex: '((?s-i:a.))b'i str: a
+B result_expr: $1 expected_results a
+
+36_n: OK regex: '((?s-i:a\N))b'i parsed_regex: '((?s-i:a\N))b'i str: a
+B result_expr: - expected_results -
+37_n: OK regex: '((?s-i:a.))b'i parsed_regex: '((?s-i:a.))b'i str: B
+B result_expr: - expected_results -
+38_n: OK regex: '((?s-i:a\N))b'i parsed_regex: '((?s-i:a\N))b'i str: B
+B result_expr: - expected_results -
+39_y: OK regex: (?i:.[b].) parsed_regex: (?i:.[b].) str: abd result_expr: $& expected_results abd
+40_y: OK regex: (?i:\N[b]\N) parsed_regex: (?i:\N[b]\N) str: abd result_expr: $& expected_results abd
+41_n: OK regex: ^(?:a?b?)*$ parsed_regex: ^(?:a?b?)*$ str: a-- result_expr: - expected_results -
+42_y: OK regex: ((?s)^a(.))((?m)^b$) parsed_regex: ((?s)^a(.))((?m)^b$) str: a
+b
+c
+ result_expr: $1;$2;$3 expected_results a
+;
+;b
+43_y: OK regex: ((?m)^b$) parsed_regex: ((?m)^b$) str: a
+b
+c
+ result_expr: $1 expected_results b
+44_y: OK regex: (?m)^b parsed_regex: (?m)^b str: a
+b
+ result_expr: $& expected_results b
+45_y: OK regex: (?m)^(b) parsed_regex: (?m)^(b) str: a
+b
+ result_expr: $1 expected_results b
+46_y: OK regex: ((?m)^b) parsed_regex: ((?m)^b) str: a
+b
+ result_expr: $1 expected_results b
+47_y: OK regex: \n((?m)^b) parsed_regex: \n((?m)^b) str: a
+b
+ result_expr: $1 expected_results b
+48_n: OK regex: ^b parsed_regex: ^b str: a
+b
+c
+ result_expr: - expected_results -
+49_n: OK regex: ()^b parsed_regex: ()^b str: a
+b
+c
+ result_expr: - expected_results -
+50_y: OK regex: ((?m)^b) parsed_regex: ((?m)^b) str: a
+b
+c
+ result_expr: $1 expected_results b
+51_y: OK Warning: Parsed regex does not match. regex: '(foo)'n parsed_regex: '(?:foo)'n str: foobar result_expr: $&-$1 expected_results foo-
+52_y: OK Warning: Parsed regex does not match. regex: '(?-n)(foo)(?n)(bar)'n parsed_regex: '(?-n)(foo)(?n)(?:bar)'n str: foobar result_expr: $&-$1-$2 expected_results foobar-foo-
+53_y: OK Warning: Parsed regex does not match. regex: '(?-n:(foo)(?n:(bar)))'n parsed_regex: '(?-n:(foo)(?n:(?:bar)))'n str: foobar result_expr: $&-$1-$2 expected_results foobar-foo-
+
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_15_group_modifiers.cpp.output b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_15_group_modifiers.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_16_perl_syntax_modifier.cpp.execution b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_16_perl_syntax_modifier.cpp.execution
new file mode 100644
index 000000000..761720007
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_16_perl_syntax_modifier.cpp.execution
@@ -0,0 +1,35 @@
+Running tests_16_perl_syntax_modifier:
+01_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $& expected_results a
+02_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $-[0] expected_results 0
+03_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $+[0] expected_results 1
+04_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $& expected_results abbb
+05_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $-[0] expected_results 0
+06_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $+[0] expected_results 4
+07_y: OK Warning: Parsed regex does not match. regex: /a\N c/x parsed_regex: /a\Nc/x str: abc result_expr: $& expected_results abc
+08_y: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzc result_expr: $& expected_results axyzc
+09_n: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzd result_expr: - expected_results -
+10_yS: OK regex: /[a b]/x parsed_regex: /[a b]/x str:   result_expr: $& expected_results  
+11_n: OK regex: /[a b]/xx parsed_regex: /[a b]/xx str:   result_expr: - expected_results -
+12_y: OK regex: /[a\ b]/xx parsed_regex: /[a\ b]/xx str:   result_expr: $& expected_results  
+13_n: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: a result_expr: - expected_results -
+14_n: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: b result_expr: - expected_results -
+15_y: OK regex: /[ ^ a b ]/xx parsed_regex: /[ ^ a b ]/xx str: A result_expr: $& expected_results A
+16_yS: OK regex: /(?x:[a b])/xx parsed_regex: /(?x:[a b])/xx str:   result_expr: $& expected_results  
+17_n: OK regex: /(?xx:[a b])/x parsed_regex: /(?xx:[a b])/x str:   result_expr: - expected_results -
+18_yS: OK regex: /(?x)[a b]/xx parsed_regex: /(?x)[a b]/xx str:   result_expr: $& expected_results  
+19_n: OK regex: /(?xx)[a b]/x parsed_regex: /(?xx)[a b]/x str:   result_expr: - expected_results -
+20_yS: OK regex: /(?-x:[a b])/xx parsed_regex: /(?-x:[a b])/xx str:   result_expr: $& expected_results  
+21_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $& expected_results a
+22_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $-[0] expected_results 0
+23_y: OK Warning: Parsed regex does not match. regex: /\N {1}/x parsed_regex: /\N{1}/x str: abbbbc result_expr: $+[0] expected_results 1
+24_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $& expected_results abbb
+25_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $-[0] expected_results 0
+26_y: OK Warning: Parsed regex does not match. regex: /\N {3,4}/x parsed_regex: /\N{3,4}/x str: abbbbc result_expr: $+[0] expected_results 4
+27_y: OK Warning: Parsed regex does not match. regex: /a\N c/x parsed_regex: /a\Nc/x str: abc result_expr: $& expected_results abc
+28_y: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzc result_expr: $& expected_results axyzc
+29_n: OK Warning: Parsed regex does not match. regex: /a\N *c/x parsed_regex: /a\N*c/x str: axyzd result_expr: - expected_results -
+30_y: OK regex: /[#]/ parsed_regex: /[#]/ str: a#b result_expr: $& expected_results #
+31_y: OK regex: /[#]b/ parsed_regex: /[#]b/ str: a#b result_expr: $& expected_results #b
+32_y: OK regex: /[#]/x parsed_regex: /[#]/x str: a#b result_expr: $& expected_results #
+33_y: OK regex: /[#]b/x parsed_regex: /[#]b/x str: a#b result_expr: $& expected_results #b
+
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_16_perl_syntax_modifier.cpp.output b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_16_perl_syntax_modifier.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_17_comments.cpp.execution b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_17_comments.cpp.execution
new file mode 100644
index 000000000..17c9a5d55
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_17_comments.cpp.execution
@@ -0,0 +1,5 @@
+Running tests_17_comments:
+01_y: OK regex: ^a(?#xxx){3}c parsed_regex: ^a(?#xxx){3}c str: aaac result_expr: $& expected_results aaac
+02_y: OK Warning: Parsed regex does not match. regex: '^a (?#xxx) (?#yyy) {3}c'x parsed_regex: '^a(?#xxx)(?#yyy){3}c'x str: aaac result_expr: $& expected_results aaac
+03_y: OK Warning: Parsed regex does not match. regex: 'foo # Match foo'x parsed_regex: 'foo'x str: foobar result_expr: $& expected_results foo
+
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_17_comments.cpp.output b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_17_comments.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_18_branch_reset.cpp.execution b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_18_branch_reset.cpp.execution
new file mode 100644
index 000000000..1d088ce31
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_18_branch_reset.cpp.execution
@@ -0,0 +1,17 @@
+Running tests_18_branch_reset:
+01_y: OK regex: (?|(a)) parsed_regex: (?|(a)) str: a result_expr: $1-$+ expected_results a-a
+02_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: d!o!da result_expr: $1-$2-$3 expected_results !o!-o-a
+03_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: aabc result_expr: $1-$2-$3 expected_results a--c
+04_y: OK regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) parsed_regex: (?|a(.)b|d(.(o).)d|i(.)(.)j)(.) str: ixyjp result_expr: $1-$2-$3 expected_results x-y-p
+05_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: a result_expr: $1 expected_results a
+06_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: b result_expr: $1 expected_results b
+07_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: c result_expr: $1 expected_results c
+08_y: OK regex: (?|(?|(a)|(b))|(?|(c)|(d))) parsed_regex: (?|(?|(a)|(b))|(?|(c)|(d))) str: d result_expr: $1 expected_results d
+09_y: OK regex: (.)(?|(.)(.)x|(.)d)(.) parsed_regex: (.)(?|(.)(.)x|(.)d)(.) str: abcde result_expr: $1-$2-$3-$4-$5- expected_results b-c--e--
+10_y: OK regex: (\N)(?|(\N)(\N)x|(\N)d)(\N) parsed_regex: (\N)(?|(\N)(\N)x|(\N)d)(\N) str: abcde result_expr: $1-$2-$3-$4-$5- expected_results b-c--e--
+11_yM: OK regex: (?|(?<foo>x)) parsed_regex: (?|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+12_yM: OK regex: (?|(?<foo>x)|(?<bar>y)) parsed_regex: (?|(?<foo>x)|(?<bar>y)) str: x result_expr: $+{foo} expected_results x
+13_yM: OK regex: (?|(?<bar>y)|(?<foo>x)) parsed_regex: (?|(?<bar>y)|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+14_yM: OK regex: (?<bar>)(?|(?<foo>x)) parsed_regex: (?<bar>)(?|(?<foo>x)) str: x result_expr: $+{foo} expected_results x
+15_y: OK regex: (?|(b)|()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(a)) parsed_regex: (?|(b)|()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(a)) str: a result_expr: $& expected_results a
+
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_18_branch_reset.cpp.output b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_18_branch_reset.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_19_lookahead.cpp.execution b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_19_lookahead.cpp.execution
new file mode 100644
index 000000000..7b34914b1
--- /dev/null
+++ b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_19_lookahead.cpp.execution
@@ -0,0 +1,77 @@
+Running tests_19_lookahead:
+01_y: OK regex: a(?!b). parsed_regex: a(?!b). str: abad result_expr: $& expected_results ad
+02_y: OK regex: (?=)a parsed_regex: (?=)a str: a result_expr: $& expected_results a
+03_y: OK regex: a(?=d). parsed_regex: a(?=d). str: abad result_expr: $& expected_results ad
+04_y: OK regex: a(?=c|d). parsed_regex: a(?=c|d). str: abad result_expr: $& expected_results ad
+05_y: OK regex: ^(?:b|a(?=(.)))*\1 parsed_regex: ^(?:b|a(?=(.)))*\1 str: abc result_expr: $& expected_results ab
+06_y: OK regex: (?=(a+?))(\1ab) parsed_regex: (?=(a+?))(\1ab) str: aaab result_expr: $2 expected_results aab
+07_n: OK regex: ^(?=(a+?))\1ab parsed_regex: ^(?=(a+?))\1ab str: aaab result_expr: - expected_results -
+08_y: OK regex: (?=(a+?))(\1ab) parsed_regex: (?=(a+?))(\1ab) str: aaab result_expr: $2 expected_results aab
+09_n: OK regex: ^(?=(a+?))\1ab parsed_regex: ^(?=(a+?))\1ab str: aaab result_expr: - expected_results -
+10_y: OK regex: (.*)(?=c) parsed_regex: (.*)(?=c) str: abcd result_expr: $1 expected_results ab
+11_yB: OK regex: (.*)(?=c)c parsed_regex: (.*)(?=c)c str: abcd result_expr: $1 expected_results ab
+12_y: OK regex: (.*)(?=b|c) parsed_regex: (.*)(?=b|c) str: abcd result_expr: $1 expected_results ab
+13_y: OK regex: (.*)(?=b|c)c parsed_regex: (.*)(?=b|c)c str: abcd result_expr: $1 expected_results ab
+14_y: OK regex: (.*)(?=c|b) parsed_regex: (.*)(?=c|b) str: abcd result_expr: $1 expected_results ab
+15_y: OK regex: (.*)(?=c|b)c parsed_regex: (.*)(?=c|b)c str: abcd result_expr: $1 expected_results ab
+16_y: OK regex: (.*)(?=[bc]) parsed_regex: (.*)(?=[bc]) str: abcd result_expr: $1 expected_results ab
+17_yB: OK regex: (.*)(?=[bc])c parsed_regex: (.*)(?=[bc])c str: abcd result_expr: $1 expected_results ab
+18_y: OK regex: (.*?)(?=c) parsed_regex: (.*?)(?=c) str: abcd result_expr: $1 expected_results ab
+19_yB: OK regex: (.*?)(?=c)c parsed_regex: (.*?)(?=c)c str: abcd result_expr: $1 expected_results ab
+20_y: OK regex: (.*?)(?=b|c) parsed_regex: (.*?)(?=b|c) str: abcd result_expr: $1 expected_results a
+21_y: OK regex: (.*?)(?=b|c)c parsed_regex: (.*?)(?=b|c)c str: abcd result_expr: $1 expected_results ab
+22_y: OK regex: (.*?)(?=c|b) parsed_regex: (.*?)(?=c|b) str: abcd result_expr: $1 expected_results a
+23_y: OK regex: (.*?)(?=c|b)c parsed_regex: (.*?)(?=c|b)c str: abcd result_expr: $1 expected_results ab
+24_y: OK regex: (.*?)(?=[bc]) parsed_regex: (.*?)(?=[bc]) str: abcd result_expr: $1 expected_results a
+25_yB: OK regex: (.*?)(?=[bc])c parsed_regex: (.*?)(?=[bc])c str: abcd result_expr: $1 expected_results ab
+26_y: OK regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) parsed_regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) str: aaaaaaaa result_expr: $1 expected_results aaaaaaa
+27_y: OK regex: a(?!b(?!c))(..) parsed_regex: a(?!b(?!c))(..) str: abababc result_expr: $1 expected_results bc
+28_y: OK regex: a(?!b(?=a))(..) parsed_regex: a(?!b(?=a))(..) str: abababc result_expr: $1 expected_results bc
+37_y: OK regex: X(\w+)(?=\s)|X(\w+) parsed_regex: X(\w+)(?=\s)|X(\w+) str: Xab result_expr: [$1-$2] expected_results [-ab]
+38_y: OK regex: ^a*(?=b)b parsed_regex: ^a*(?=b)b str: ab result_expr: $& expected_results ab
+39_y: OK regex: '(?!\A)x'm parsed_regex: '(?!\A)x'm str: a
+xb
+ result_expr: - expected_results -
+40_n: OK regex: '^(o)(?!.*\1)'i parsed_regex: '^(o)(?!.*\1)'i str: Oo result_expr: - expected_results -
+41_n: OK regex: .*a(?!(b|cd)*e).*f parsed_regex: .*a(?!(b|cd)*e).*f str: ......abef result_expr: - expected_results -
+42_y: OK regex: ^(a*?)(?!(aa|aaaa)*$) parsed_regex: ^(a*?)(?!(aa|aaaa)*$) str: aaaaaaaaaaaaaaaaaaaa result_expr: $1 expected_results a
+43_y: OK regex: (?!)+?|(.{2,4}) parsed_regex: (?!)+?|(.{2,4}) str: abcde result_expr: $1 expected_results abcd
+44_y: OK regex: ^(a*?)(?!(a{6}|a{5})*$) parsed_regex: ^(a*?)(?!(a{6}|a{5})*$) str: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa result_expr: $+[1] expected_results 12
+45_y: OK regex: a(?!b(?!c(?!d(?!e))))...(.) parsed_regex: a(?!b(?!c(?!d(?!e))))...(.) str: abxabcdxabcde result_expr: $1 expected_results e
+46_y: OK regex: X(?!b+(?!(c+)*(?!(c+)*d))).*X parsed_regex: X(?!b+(?!(c+)*(?!(c+)*d))).*X str: aXbbbbbbbcccccccccccccaaaX result_expr: - expected_results -
+47_y: OK regex: ((?s).)c(?!.) parsed_regex: ((?s).)c(?!.) str: a
+b
+c
+ result_expr: $1 expected_results 
+
+48_y: OK regex: ((?s).)c(?!.) parsed_regex: ((?s).)c(?!.) str: a
+b
+c
+ result_expr: $1:$& expected_results 
+:
+c
+49_y: OK regex: ((?s)b.)c(?!.) parsed_regex: ((?s)b.)c(?!.) str: a
+b
+c
+ result_expr: $1 expected_results b
+
+50_y: OK regex: ((?s)b.)c(?!.) parsed_regex: ((?s)b.)c(?!.) str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+51_y: OK regex: ((?s)b.)c(?!\N) parsed_regex: ((?s)b.)c(?!\N) str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+52_y: OK regex: '(b.)c(?!\N)'s parsed_regex: '(b.)c(?!\N)'s str: a
+b
+c
+ result_expr: $1:$& expected_results b
+:b
+c
+53_n: OK regex: a*(?!) parsed_regex: a*(?!) str: aaaab result_expr: - expected_results -
+
diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_19_lookahead.cpp.output b/regression-tests/test-results/msvc-2022-c++latest/pure2-regex_19_lookahead.cpp.output
new file mode 100644
index 000000000..e69de29bb
diff --git a/source/regex.h2 b/source/regex.h2
index 84e8c1a12..4251773d0 100644
--- a/source/regex.h2
+++ b/source/regex.h2
@@ -15,6 +15,8 @@
 
 template<typename matcher_wrapper, typename Iter, typename CharT>
 using matcher_wrapper_type = typename matcher_wrapper::template wrap<Iter, CharT>;
+template<typename matcher>
+using matcher_context_type = typename matcher::context;
 
 using error_func = std::function<void(std::string)>;
 
@@ -834,9 +836,9 @@ parse_context: type = {
 
     // Misc functions
 
-    get_pos:   (this)                       pos;
-    get_range: (this, start: int, end: int) std::string(regex..substr(start, end - start + 1));
-    valid:     (this) -> bool               = { return has_next() && !has_error; }
+    get_pos:   (this)                             pos;
+    get_range: (this, start: size_t, end: size_t) std::string(regex..substr(start, end - start + 1));
+    valid:     (this) -> bool                   = { return has_next() && !has_error; }
 
     error: (inout this, err: std::string) -> token_ptr = {
         has_error = true;
@@ -2425,7 +2427,7 @@ word_boundary_token_matcher: <CharT, negate: bool> (inout cur, inout ctx) -> boo
 regular_expression: <CharT, matcher_wrapper> type = {
 
     matcher: <Iter> type == matcher_wrapper_type<matcher_wrapper, Iter, CharT>; // TODO: Remove when nested types are allowed: https://github.com/hsutter/cppfront/issues/727
-    context: <Iter> type == matcher<Iter>::context;
+    context: <Iter> type == matcher_context_type<matcher<Iter>>;                      // TODO: Remove when nested types are allowed: https://github.com/hsutter/cppfront/issues/727
 
     search_return: <Iter> type = {
         public matched: bool;