如何通过c ++从整个路径获取文件名

时间:2015-03-11 06:59:49

标签: c++ regex

问题:
我知道我可以通过这个得到文件名:

std::string wholePath = "/User/home/Lib/hello.cpp.h";
std::regex e(".*\\/(.*)\\..*$");
std::smatch sm;
std::regex_match(wholePath.cbegin(), wholePath.cend(), sm, e);

std::cout << "File Name is : " << sm[1];

但我不知道如何从中获取文件名:

std::string wholePath = "\User\home\Lib\hello.cpp.h";
std::regex e_1(".*\(.*)\\..*$");
std::regex e_2(".*\\(.*)\\..*$");
std::regex e_3(".*\\\(.*)\\..*$");
std::regex e_4(".*\\\\(.*)\\..*$");
std::smatch sm;
// std::regex_match(wholePath.cbegin(), wholePath.cend(), sm, e);

我已经尝试了上述四种表达方式但它们无法正常工作 我的问题,如何匹配char&#39; \&#39; 帮助/.\

2 个答案:

答案 0 :(得分:4)

可能更适合使用std::string::find_last_of()

    std::string Path;
    std::string FileName;
    // find last '/' or '\\' symbol in source string
    std::string::size_type found = str.find_last_of("/\\");
    // if we found one of this symbols
    if(found!=std::string::npos){
        // path will be all symbols before found position
        Path = str.substr(0,found);
        // filename will be all symbols after found position
        FileName = str.substr(found+1);
    } else { // if we not found '/' or '\\'
        // path will be empty
        Path.clear();
        // and source string will contain file name
        FileName = str;
    }
    std::cout << "Path: " << Path << '\n';
    std::cout << "FileName: " << FileName << std::endl;

答案 1 :(得分:2)

一般情况下,'\'在双引号内应更改为'\\'

std::string wholePath = "\\User\\home\\Lib\\hello.cpp.h";
std::regex e(".*\\\\(.*)\\..*$");

但是这种方法似乎不适用于拆分Windows路径或Unix路径