• Manipulating std::match_results?

    From Hergen Lehmann@21:1/5 to All on Mon Apr 4 17:44:31 2016
    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! ]

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Martin Bonner@21:1/5 to Hergen Lehmann on Tue Apr 5 08:19:55 2016
    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! ]

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From guy.tristram@googlemail.com@21:1/5 to Hergen Lehmann on Tue Apr 5 08:19:46 2016
    { 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! ]

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)