Просматривая ответы здесь, я протестировал другой метод, который включает в себя использование разных имен групповых меток и просто тестирование того, какой из них является пустым при итерации по ним.Хотя это, вероятно, не самый быстрый код, на данный момент это наиболее читаемое решение, которое более важно для моей проблемы.
Вот код, который работал для меня:
#include <boost/xpressive/xpressive.hpp>
using namespace boost::xpressive;
...
std::vector<std::string> tokens;
std::string input = "here is a \"test string\"";
sregex pattern = sregex::compile("\"(?P<quoted>[^\"]*)\"|(?P<unquoted>\\S+)");
sregex_iterator cur( input.begin(), input.end(), pattern );
sregex_iterator end;
while(cur != end)
{
smatch const &what = *cur;
if(what["quoted"].length() > 0)
{
tokens.push_back(what["quoted"]);
}
else
{
tokens.push_back(what["unquoted"]);
}
cur++;
}