正则表达式问题

时间:2009-10-13 08:24:06

标签: c++ regex boost

我有以下字符串:

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。我想,正则表达式对此最好,但不幸的是我不知道如何构建一个因此我需要提出这个问题。

任何有能力帮我解决这个问题的人吗?

2 个答案:

答案 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"
}