Manipulating std::match_results?

105 views
Skip to first unread message

Hergen Lehmann

unread,
Apr 4, 2016, 6:50:13 PM4/4/16
to

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! ]

Martin Bonner

unread,
Apr 5, 2016, 9:20:08 AM4/5/16
to

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).

guy.tr...@googlemail.com

unread,
Apr 5, 2016, 9:20:12 AM4/5/16
to
{ 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.
Reply all
Reply to author
Forward
0 new messages