Вопрос

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?

Это было полезно?

Решение 2

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

Другие советы

You can do something like this:

static const regex e("<(From )?([A-Za-z0-9_]+)>(.*?)");
string chat_input("<Darker> Hello");
smatch mr;
if (regex_search(begin(chat_input), end(chat_input), mr, e)
    string playername = mr[2].str();   //Get contents of the second (...)

Please note that regex is part of C++11, so you don't need boost for it, unless your regular expression is complex (as C++11 and newer still has difficulties processing complex regular expressions).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top