正則表達式獲取文件夾我有這樣C++從文件路徑
/mnt/opt/storage/ssd/subtitles/8/vtt/2011022669-5126858992107.vtt
文件名如何與*
使用正則表達式,所以我得到
/mnt/opt/storage/ssd/subtitles/8/vtt/*
替換的文件名?
我知道簡單的循環拆分或boost::filesystem
的方法,我正在尋找regex_replace
方法。
正則表達式獲取文件夾我有這樣C++從文件路徑
/mnt/opt/storage/ssd/subtitles/8/vtt/2011022669-5126858992107.vtt
文件名如何與*
使用正則表達式,所以我得到
/mnt/opt/storage/ssd/subtitles/8/vtt/*
替換的文件名?
我知道簡單的循環拆分或boost::filesystem
的方法,我正在尋找regex_replace
方法。
你不需要正則表達式此:
string str = "/mnt/opt/storage/ssd/subtitles/8/vtt/2011022669-5126858992107.vtt";
auto lastSlash = str.find_last_of('/');
str.replace(str.begin() + lastSlash + 1, str.end(), "*");
嘗試此圖案
(([\w+\-])+)(?=(\.\w{3}))
在記事本中測試++。
(?=())它的表情。因此,只有在.xxx或.xx格式的擴展名(。\ w {2,3))位於該組之後時,它纔會匹配([\ w + - ])+。 在C++中,你必須將組替換成*類似 替換(字符串,$ 1,'*') - 我不知道C++替換函數,只是假設。
$ 1,$ 2,$ 3 ...它的組號,在這種情況下 - $ 1它(([\ w + - ])+)。
下面是REGEXP_REPLACE [live]的解決方案:
std::string path = "/mnt/opt/storage/ssd/subtitles/8/vtt/2011022669-5126858992107.vtt";
std::regex re(R"(\/[^\/]*?\..+$)");
std::cout << path << '\n';
std::cout << std::regex_replace(path, re, "/*") << '\n';
輸出:
的/ mnt /選擇/存儲/ ssd/subtitles/8/vtt/2011022669-5126858992107.vtt /mnt/opt/storage/ssd/subtitles/8/vtt/*
但是,...正則表達式似乎是這樣簡單的更換有點過重的重量
我建議*試圖*而不僅僅是*尋找*。你有沒有拿出任何代碼到目前爲止? –