Вопрос о регулярных выражениях

У меня есть следующая строка:

const std::string args = "cmdLine=\"-d ..\\data\\configFile.cfg\" rootDir=\"C:\\abc\\def\""; // please note the space after -d

Я хотел бы разбить его на 2 подстроки:

std::str1 = "cmdLine=...";

а также

std::str2 = "rootDir=...";

используя boost /gorithm / string.hpp. Я подумал, что для этого лучше всего использовать регулярные выражения, но, к сожалению, я понятия не имею, как их создать, поэтому мне нужно было задать вопрос.

Кто-нибудь способен помочь мне с этим?

13.10.2009 08:24:06
Нет ли какой-нибудь документации с простым примером для регулярных выражений Boost? По крайней мере, попробуйте что-нибудь, даже если это произойдет, прежде чем задавать вопрос, в противном случае это как «пожалуйста, сделайте всю мою работу за меня».
user181548 13.10.2009 08:51:20
Вам просто нужно регулярное выражение для разбора строк в кавычках. Я бы не стал писать это с нуля на твоем месте. Google для регулярных выражений в кавычках, и вы найдете то, что вам нужно.
Paul Arnold 13.10.2009 08:53:14
2 ОТВЕТА
РЕШЕНИЕ

Чтобы решить проблему из вашего вопроса, проще всего использовать 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"
}
1
13.10.2009 17:04:03

Образцы кода

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
13.10.2009 09:02:34