问题:
我知道我可以通过这个得到文件名:
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; 帮助/.\
答案 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路径