Я пытаюсь найти символ *, чтобы найти совпадения и сохранить каждое совпадение в виде структуры, используя регулярное выражение boost. Я не знаю, как использовать итераторы std :: string вместо char *. Поэтому я создал std :: string из char * и использовал их. Но теперь я хочу указатели в оригинальном char *, которые можно найти только с помощью созданной мной std :: string. Смотрите следующий код. Комментарии должны прояснить ваши сомнения.
typedef struct {
void *pFind; // Pointer to begining of match
int lenFind; // Length of match
} IppRegExpFind;
bool regExSearch(int nStrLen /*Length of input string*/,
std::vector<IppRegExpFind>& vectResult /*vector of struct to store matches*/,
int &numMatches /* number of matches*/,
const char *sStrInput /*Input string to be searched*/,
const char *sStrRegex /*Input regex string*/)
{
bool bStatusOk = true;
try{
std::string regexStr(sStrRegex);
std::string inputStr(sStrInput);
static const boost::regex ex(regexStr);
std::string::const_iterator start, end;
start = inputStr.begin();
end = inputStr.end();
boost::match_results<std::string::const_iterator> what;
boost::match_flag_type flags = boost::match_default;
std::vector <std::string> matches;
while(boost::regex_search(start, end, what, ex, flags))
{
matches.push_back(what.str());
start = what[0].second;
}
// convert boost:match_Results to a vector of IppRegExpFind
}
catch(...){
bStatusOk = false;
}
return bStatusOk;
}