При составлении регулярного выражения не получается сохранить каждую часть входного пути. Входная строка:
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
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите пожалуйста, это функция для менюКаждый раз, когда сыграна какая-то из игр, я вызываю функцию чтобы вернуться с меню