我有以下字符串:
const std::string args = "cmdLine=\"-d ..\\data\\configFile.cfg\" rootDir=\"C:\\abc\\def\""; // please note the space after -d
我想把它分成两个子串:
std::str1 = "cmdLine=...";
和
std::str2 = "rootDir=...";
使用boost / algorithm / string.hpp。我想,正则表达式对此最好,但不幸的是我不知道如何构建一个因此我需要提出这个问题。
任何有能力帮我解决这个问题的人吗?
答案 0 :(得分:1)
代码示例
char *cstr1 = (char*)args.c_str();
char *cstr2 = strstr(cstr1, "=\""); cstr2 = strstr(cstr2, "=\"); // rootDir="
cstr2 = strrchr(cstr2, ' '); // space between " and rootDir
*cstr2++ = '\0';
//then save to your strings
std::string str1 = cstr1;
std::string str2 = cstr2;
就是这样。
注意: 上面的代码支持这些字符串
"cmdLine=\"-d ..\\data\\configFile.cfg\" rootDir=\"C:\\abc\\def\"" or
"ABCwhatever=\"-d ..\\data\\configFile.cfg\" XYZ=\"C:\\abc\\def\""
答案 1 :(得分:1)
要解决问题中的问题,最简单的方法是使用strstr查找字符串中的子字符串,使用string::substr复制子字符串。但是如果你真的想要使用Boost和正则表达式,你可以按照以下示例进行操作:
#include <boost/regex.hpp>
...
const std::string args = "cmdLine=\"-d ..\\data\\configFile.cfg\" rootDir=\"C:\\abc\\def\"";
boost::regex exrp( "(cmdLine=.*) (rootDir=.*)" );
boost::match_results<string::const_iterator> what;
if( regex_search( args, what, exrp ) ) {
string str1( what[1].first, what[1].second ); // cmdLine="-d ..\data\configFile.cfg"
string str2( what[2].first, what[2].second ); // rootDir="C:\abc\def"
}