我正在尝试匹配一个看起来像这样的字符串:
/new-contact?id=nb&name=test
或者 /new-contact?id=nb
基本上,参数的数量是未定义的。
所以我尝试了这个正则表达式:
boost::regex re("^/new-contact\\?(([a-zA-Z0-9_-]+)=([a-zA-Z0-9_-]+)&?)+$");
但是当我尝试将 re 与以下功能一起使用时:
function test()
{
std::string input("/new-contact?id=5&name=Test");
boost:cmatch token;
boost::regex_match(req.c_str(), token, input);
std::cout << token[1] << std::endl;
}
我明白了
output: name=Test
如果我将输入字符串更改为
std::string input("/new-contact?id=5&");
我明白了
output: id=5
我想我只得到最后一个令牌,但我想用最后一个“+”得到所有东西?
我错过了什么?
它现在正在使用:
^/new-contact\\?((([a-zA-Z0-9_-]+)=([a-zA-Z0-9_-]+)&?)+)$