Вопрос о регулярных выражениях - PullRequest
0 голосов
/ 13 октября 2009

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

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 / алгоритма / string.hpp. Я подумал, что для этого лучше всего использовать регулярные выражения, но, к сожалению, я понятия не имею, как его создать, поэтому мне нужно было задать вопрос.

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

Ответы [ 2 ]

1 голос
/ 13 октября 2009

Для решения проблемы из вашего вопроса проще всего использовать 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 октября 2009

Образцы кода

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\""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...