При составлении регулярного выражения не получается сохранить каждую часть входного пути. Входная строка:
path = "L:/Dir/Directory/";
regex e("^([A-Z]):/(([A-Za-z]+)/)*$");
if (regex_search(path, m, e, fl))...
При данном регулярном выражении в массив m сохраняется первая большая буква ("L") и последняя часть пути "Directory". Нужно, чтобы сохранялись все части входного пути (в том числе и "Dir").
Проще всего в данном случае разбить строку на части с помощью :?/ (:? находит 1 или 0 знаков :, а / находит 1 /):
#include <iostream>
#include <string>
#include <vector>
#include <regex>
using namespace std;
int main() {
regex rx(":?/");
string path = "L:/Dir/Directory/";
vector<string> names(sregex_token_iterator(path.begin(), path.end(), rx, -1),
sregex_token_iterator());
for( auto & p : names ) cout << p << endl;
return 0;
}
Результат работы программы:
L
Dir
Directory
Сборка персонального компьютера от Artline: умный выбор для современных пользователей