Search code examples
c++stdstringboost-regex

Put first boost::regex match into a string


Somehow, I've failed to find out, how to put only the first occurrence or regular expression to string. I can create a regex object:

static const boost::regex e("<(From )?([A-Za-z0-9_]+)>(.*?)"); 

Now, I need to match ([A-Za-z0-9_]+) to std::string, say playername.

std::string chat_input("<Darker> Hello");
std::string playername = e.some_match_method(chat_input, 1);   //Get contents of the second (...)

What have I missed?
What should be instead of some_match_method and what parameters should it take?


Solution

  • I think what you're missing is that boost::regex is the regular expression, but it doesn't do the parsing against a given input. You need to actually use it as a parameter to boost::regex_search or boost::regex_match, which evaluate a string (or iterator pairs) against the regular expression.

    static const boost::regex e("<(From )?([A-Za-z0-9_]+)>(.*?)"); 
    std::string chat_input("<Darker> Hello");
    boost::match_results<std::string::const_iterator> results;
    if (boost::regex_match(chat_input, results, e))
    {
         std::string playername = results[2];  //Get contents of the second (...)
    }