我有以下字符串
argsStr = "server ('m1.labs.terada')ta.com') username ('user5') password('user)5') dbname ('default')";
我想提取参数名称,即“server”“username”“password”。
我正在使用以下正则表达式
boost::regex re1("\\(\'[!-~]+\'\\)");
boost::sregex_token_iterator x(argsStr.begin(), argsStr.end(), re1, -1),x1; boost::sregex_token_iterator y;
std::copy(x, x1, std::back_inserter(v2));
v2是字符串向量,我在其中提取标记。但是,我得到的代币是
"server " INSTEAD of "server
" username " INSTEAD of "username".
如何删除这些空格?
答案 0 :(得分:1)
#include <boost/algorithm/string.hpp>
std::string str("hello world! ");
boost::trim_right(str);
答案 1 :(得分:0)
您可以使用以下方法从字符串中删除空格:
#include <boost/algorithm/string/erase.hpp>
str.erase(remove_if(str.begin(), str.end(), ::isspace),str.end());
答案 2 :(得分:0)
您只需在正则表达式中添加几个"\s*"
:
std::regex re1(R"(\s*\('[!-~]+'\)\s*)");
std::sregex_token_iterator x(argsStr.begin(), argsStr.end(), re1, -1), x1;
std::copy(x, x1, std::back_inserter(v2));
\s
代表&#34;空白字符&#34;。
这将留下最左边的空白区域 - 如果你想考虑到这一点,你可以改变范围:
std::string::iterator start = std::find_if_not(argsStr.begin(), argsStr.end(), ::isspace);
std::sregex_token_iterator x(start, argsStr.end(), re1, -1), x1;
我在这个示例中使用了std::regex
,但它也适用于boost。另外,我使用raw string literal来提高可读性,如果它甚至是正则表达式的话。