Если формат данных не будет меняться от случая к случаю, и все аргументы будут присутствовать и идти в обозначенном порядке, то подойдет регэксп вида
(.*)\[f\]\s\[data="(.*)",data1="(.*)"\]
Для конкретной реализации вполне подойдут регэкспы из стандартной библиотеки (
en.cppreference.com/w/cpp/regex):#include <iostream>
#include <regex>
void parse()
{
std::string var = "smth [f] [data="j",data1="gs"]";
const std::regex r("<-ваш regex->");
std::smatch sm;
if (regex_search(var, sm, r))
{
cout << sm[1] << sm[2] << sm[3] << endl;
}
}