避免在cpp中使用空标记

时间:2017-06-20 07:43:52

标签: c++ regex token

我有一个字符串:

s = "server ('m1.labs.terada')ta.com') username ('user5') password('user)5') dbname ('default')";

我正在提取参数名称:例如server,username ...,dbname。

要做到这一点,我使用以下正则表达式:

regex re("\\(\'[!-~]+\'\\)");
sregex_token_iterator i(s.begin(), s.end(), re, -1);
sregex_token_iterator j;
unsigned count = 0;
while(i != j)
{
    string str1 = *i;
    cout <<"token = "<<str1<< endl;
    i++;
    count++;
}
cout << "There were " << count << " tokens found." << endl

为此,我得到的输出是:

token = server 
token =  username 
token =  password
token =  dbname 
token =  
There were 5 tokens found.

如何避免形成第五个令牌。我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

事实证明,字符串末尾有一些非单词字符。您可以将它们与\W*(零个或多个非单词字符)匹配。由于您的令牌仅由单词字符组成,因此您可以使用\W*模式安全地包装您的模式:

regex re("\\W*\\(\'[!-~]+\'\\)\\W*");

请参阅C++ online demo

结果:

token = server
token = username
token = password
token = dbname
There were 4 tokens found.