不知怎的,我没有找到,如何只将第一次出现或正则表达式放到字符串中。我可以创建一个正则表达式对象:
static const boost::regex e("<(From )?([A-Za-z0-9_]+)>(.*?)");
现在,我需要将([A-Za-z0-9_]+)
与std::string
匹配,比如playername
。
std::string chat_input("<Darker> Hello");
std::string playername = e.some_match_method(chat_input, 1); //Get contents of the second (...)
我错过了什么?
应该是什么而不是some_match_method
以及它应该采用什么参数?
答案 0 :(得分:5)
您可以这样做:
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 (...)
请注意,正则表达式是C ++ 11的一部分,所以除非你的正则表达式很复杂(因为C ++ 11和更新版本仍然难以处理复杂的正则表达式),所以你不需要对它进行提升。
答案 1 :(得分:2)
我认为你缺少的是boost::regex
是正则表达式,但它没有对给定的输入进行解析。您需要将它实际用作boost::regex_search
或boost::regex_match
的参数,它会根据正则表达式计算字符串(或迭代器对)。
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 (...)
}