f



Manipulating std::match_results?

Hello,

i am currently in the process of refactoring some old code into 
c++11/14. Part of that code is a regex-like pattern matching mechanism, 
which (due to compatibility reasons) should be kept in place for now.

However, in preparation of a future transition to std::regex, i would 
like to go ahead, and store the results in a std::match_results object.

Unfortunately, i can't find any setter methods or constructors in this 
class, except for the default and copy constructors. Is there any 
(preferably portable) way to set the contents (sub-matches, prefix, 
suffix) of a std::match_results object without going through 
std::basic_regex?

TIA,
Hergen


-- 
      [ See http://www.gotw.ca/resources/clcm.htm for info about ]
      [ comp.lang.c++.moderated.    First time posters: Do this! ]

0
Hergen
4/4/2016 5:44:31 PM
comp.lang.c++.moderated 10738 articles. 1 followers. allnor (8509) is leader. Post Follow

2 Replies
287 Views

Similar Articles

[PageSpeed] 59

{ quoted server banner redacted. -mod }

On Monday, April 4, 2016 at 11:50:13 PM UTC+1, Hergen Lehmann wrote:
> Hello,
> 
> i am currently in the process of refactoring some old code into 
> c++11/14. Part of that code is a regex-like pattern matching mechanism, 
> which (due to compatibility reasons) should be kept in place for now.
> 
> However, in preparation of a future transition to std::regex, i would 
> like to go ahead, and store the results in a std::match_results object.
> 
> Unfortunately, i can't find any setter methods or constructors in this 
> class, except for the default and copy constructors. Is there any 
> (preferably portable) way to set the contents (sub-matches, prefix, 
> suffix) of a std::match_results object without going through 
> std::basic_regex?
> 
> TIA,
> Hergen
> 

I don't think so. From: http://en.cppreference.com/w/cpp/regex/match_results

This is a specialized allocator-aware container. It can only be default
created, obtained from std::regex_iterator, or modified by std::regex_search
or std::regex_match.


-- 
      [ See http://www.gotw.ca/resources/clcm.htm for info about ]
      [ comp.lang.c++.moderated.    First time posters: Do this! ]

0
guy
4/5/2016 8:19:46 AM
On Tuesday, 5 April 2016 00:50:13 UTC+2, Hergen Lehmann  wrote:
> Hello,
> 
> i am currently in the process of refactoring some old code into 
> c++11/14. Part of that code is a regex-like pattern matching mechanism, 
> which (due to compatibility reasons) should be kept in place for now.
> 
> However, in preparation of a future transition to std::regex, i would 
> like to go ahead, and store the results in a std::match_results object.
> 
> Unfortunately, i can't find any setter methods or constructors in this 
> class, except for the default and copy constructors. Is there any 
> (preferably portable) way to set the contents (sub-matches, prefix, 
> suffix) of a std::match_results object without going through 
> std::basic_regex?

I think you will find that setter methods are regarded as implementation
details, and so are not standardized.

I think your best bet is to write a class with an interface like
std::match_results, and then make rigorous use of `auto` in the calling
code so you can just swap in the standard class later.  (Alternatively, use
a typedef that can be toggled).


-- 
      [ See http://www.gotw.ca/resources/clcm.htm for info about ]
      [ comp.lang.c++.moderated.    First time posters: Do this! ]

0
Martin
4/5/2016 8:19:55 AM
Reply: